我知道如何将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”,Name =“A”] [“id”:“2”,Name =“B”]
答案 0 :(得分:4)
最简单的方法是通过编写单独的toMap
辅助方法来帮助自己,将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());
此外,看起来你正在尝试重新发明一个轮子。考虑使用一些序列化/反序列化库。
答案 1 :(得分:1)
您可以使用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);
Reduce方法需要3个参数:
BiFunction
提供2个参数:accumulator(在您的情况下为类型List<Map<String,String>>
)和从流迭代(Div
对象获取的当前值)并返回累加器类型的值(a,b) -> a
就够了。这种方法非常类似于函数式编程中已知的folding。