如何使用Java 8流创建多个新的Hashmap?

时间:2018-07-12 10:14:37

标签: java spring java-8 functional-programming

我想使用Java 8流实现以下代码段。任何答案都将是可理解的。我需要为相同的键``数量''设置不同的值,以便在循环中创建新的哈希图。 [{{amount = 100},{amount = 200}]

List<String> data = Arrays.asList('', '', '');
List<Map<String,Object> finalList = new ArrayList();
for(String dataIterate : data) {
    Map<String,Object> map = new HashMap();
    map.put("amount",dataIterate);
    finalList.add(map);
}

3 个答案:

答案 0 :(得分:2)

您要的是什么

List<Map<String, String>> result = data.stream()
        .map(s -> Stream.of(s).collect(Collectors.toMap(s2 -> "amount", Function.identity())))
        .collect(Collectors.toList());

获取源中的每个元素,使用给定的常量键和该元素的值创建一个Map。最后将它们收集到List

答案 1 :(得分:2)

 data.stream()
     .map(dataIterate -> {
           Map<String,Object> map = new HashMap();
           map.put("amount", dataIterate);
           return map;
     })
     .collect(Collectors.toList()) // or any other terminal operation you might need

但实际上还不清楚为什么不更简单 SimpleEntryPair,或者其他任何可以保留键/值而不是带有{单次输入

答案 2 :(得分:0)

您可以按照以下步骤操作,对initialization block使用Map

List<Map<String, String>> map = 
           data.stream().map(data -> new HashMap<String, String>(){{put("amount", data);}})
                        .collect(Collectors.toList());

Workable Demo


但是要存储相同键的多个值,最好使用Map<String, List<String>>