繁体   English   中英

如何转换清单 <Object> 进入清单 <Map<String,String> &gt;在Java8中

[英]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对象),并返回累加器类型的值
  • 比较器函数(在这种情况下,lambda (a,b) -> a就足够了。

这种方法与功能编程中已知的折叠非常相似。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM