gpt4 book ai didi

java - 如何使用泛型使这个 for 循环更通用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:44:58 24 4
gpt4 key购买 nike

这些是我项目的类。Bean 类是 Employe 和 Computer 的父类(super class)型,而不是 intanziable。

abstract Class Bean{
private HashMap<String, String> fields = null;
protected Bean(Map<String, Object> row) {
//fill HashMap fields
}
}
public class Employe extends Bean {
public Employe (Map<String, Object> row) {
super(row);
}
}

public class Computer extends Bean {
public Computer (Map<String, Object> row) {
super(row);
}
}

如何使用泛型使这个 for 循环更通用?

我会在实用方法中使用泛型来编写下面的两个循环。

//Loop 1

List<Map<String, Object>> employeRows = //from query on database

List<Employe> employList = new ArrayList<Employe>();

for (Map<String, Object> row : employeRows) {
Employe e = new Employe(row);
employList .add(e);
}

//Loop 2

List<Map<String, Object>> computerRows = //from query on database

List<Computer> computerList = new ArrayList<Computer>();

for (Map<String, Object> row : computerRows ) {
Computer c = new Computer(row);
computerList.add(c);
}

这个伪代码是我想要实现的一个例子:

List<Employe> = Utility.toList(employeRows, ...);
List<Computer> = Utility.toList(computerList, ...);

最佳答案

如果您使用的是 Java 7 或更低版本,工厂模式是最佳选择。但如果您已经在使用 Java 8,则可以使用流和 lambda/方法引用来实现这一点。

以下是使用 Java 8 的方法:

public static <T> List<T> toList(List<Map<String, Object>> rows, Function<Map<String, Object>, T> mapper) {
return rows.stream().map(mapper).collect(Collectors.toList());
}

然后通过将构造函数作为方法引用传递来调用此方法:

List<Map<String, Object>> employeRows = new ArrayList<Map<String, Object>>();
List<Map<String, Object>> computerRows = new ArrayList<Map<String, Object>>();

List<Employe> employList = toList(employeRows, Employe::new);
List<Computer> computerList = toList(computerRows, Computer::new);

关于java - 如何使用泛型使这个 for 循环更通用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28727223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com