[英]How to convert List<Object> into List<Map<String,String>> in java8
我知道如何将List<Object>
转换为Map<String,String>
如您在此代码中看到的:
Map<Long, String> divMap = divs.stream()
.collect(Collectors.toMap(Div::getId, Div::getName));
输出为:
“ 1”:“ A”,“ 2”:“ B”
但是我想用下面给出的输出返回List<Map<String,String>>
:
[“ id”:“ 1”,名称=“ A”] [“ id”:“ 2”,名称=“ B”]
最简单的方法是编写一个单独的toMap
helper方法来帮助自己,该方法将Div
转换为Map<String, String>
。
private Map<String, String> toMap(Div div) {
Map<String, String> result = new HashMap<>();
result.put("id", div.getId().toString());
result.put("name", div.getName());
return result;
}
...然后一切变得容易得多 :
List<Map<String, String>> divMap = divs.stream()
.map(this::toMap)
.collect(Collectors.toList());
同样,您似乎正在尝试重新发明轮子。 考虑使用一些序列化/反序列化库。
您可以使用Stream的reduce
方法,例如:
final List<Div> divs = Arrays.asList(
new Div("1", "A"),
new Div("2", "B")
);
final List<Map<String, String>> result = divs.stream()
.reduce(new ArrayList<>(), (list, div) -> {
list.add(new HashMap<String, String>() {{
put("id", div.getId());
put("name", div.getName());
}});
return list;
}, (a, b) -> a);
减少方法需要3个参数:
BiFunction
提供2个参数:累加器(在您的情况下为List<Map<String,String>>
类型)和从流迭代中获取的当前值( Div
对象),并返回累加器类型的值 (a,b) -> a
就足够了。 这种方法与功能编程中已知的折叠非常相似。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.