gpt4 book ai didi

java - 从 java 8 中没有 POJO 的对象列表或流中收集为 HashMap

转载 作者:行者123 更新时间:2023-12-01 14:10:20 25 4
gpt4 key购买 nike

我有一个对象列表,我必须从中创建 HashMap<String,String>ConcurrentHashMap<String,String>对列表中的每个对象应用一定的逻辑之后。下面的代码在不使用 java 8 的情况下也能正常工作。

 for (Model model : parser.getList()) {
String name = model.getName();
String val = parser.getValue(arr, name);
map.putIfAbsent(name, val);
}

我能够将其翻译为

Map<String, String> map = new HashMap<>();
parser.getList().forEach(model -> map.putIfAbsent(model.getName(),parser.getValue(arr,model.getName())));

但是我想探索 Collectors.toMap 的用法看看我是否可以在这个用例中利用它。我试图做类似下面的事情,但这不是正确的用法,因为我无法使用toMap()中的参数调用方法parser.getValue .

 Map<String,String> valMap = parser.getFieldList().stream().collect(Collectors.toMap(Model::getName,parser.getValue(arr,Model::getName),(left,right)->right),HashMap::new); 

我能够使用Collectors.toMap()当我创建 POJO ValHolder 来保存如下值时。

Map<String,String> tranMap = parser.getFieldList().stream().map(model -> {
return new ValHolder(model.getName(),parser.Value(dataArray,model.getName()));
}).collect(Collectors.toMap(ValHolder::getName,ValHolder::getValue,(x,y)->y,HashMap::new));

创建用于保存该值的 POJO 如下

class ValHolder {

String name;
String value;

public String getName() {
return name;
}

public String getValue() {
return value;
}

ValHolder(String name, String val){
fieldName = name;
value = val;
}
}

我想知道是否 toMap()无需创建 POJO 即可使用,以保存可通过方法引用轻松访问的值。

最佳答案

您不必使用方法引用。

例如:

Map<String,String> valMap = 
parser.getFieldList()
.stream()
.collect(Collectors.toMap(Model::getName,
m -> parser.getValue(arr,m.getName()),
(left,right)->right,
HashMap::new));

或者,您可以使用 Map.Entry 实现代替 POJO:

Map<String,String> tranMap = 
parser.getFieldList()
.stream()
.map(model -> new SimpleEntry<>(model.getName(),parser.getValue(dataArray,model.getName())))
.collect(Collectors.toMap(Map.Entry::getKey,
Map.Entry::getValue,
(x,y)->y,
HashMap::new));

关于java - 从 java 8 中没有 POJO 的对象列表或流中收集为 HashMap<String,String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62040833/

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