Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过java8将列表转换为映射?_Java_Java 8_Java Stream - Fatal编程技术网

如何通过java8将列表转换为映射?

如何通过java8将列表转换为映射?,java,java-8,java-stream,Java,Java 8,Java Stream,你好,我是java世界的新手 我有一个关于如何使用树度量将列表转换为地图的问题 public class AdditionalMetrics implements Serializable { private static final long serialVersionUID = 3813944465194104658L; private Long id; private String masterId; private String nodeKey;

你好,我是java世界的新手 我有一个关于如何使用树度量将列表转换为地图的问题

public class AdditionalMetrics implements Serializable {
    private static final long serialVersionUID = 3813944465194104658L;

    private Long id;
    private String masterId;
    private String nodeKey;
    private String nodeValue;
}
我想将
List
转换为
Map您不能使用
toMap()
,因为您有许多nodeKey/nodeValue对要映射到单个masterId值(除非使用合并函数)

通过
masterId
进行分组更容易:

Map<String, Map<String, String>> result = additionalMetrics.stream()
        .collect(Collectors.groupingBy(
                AdditionalMetrics::getMasterId,
                Collectors.toMap(AdditionalMetrics::getNodeKey, 
                        AdditionalMetrics::getNodeValue)));
Map result=additionalMetrics.stream()
.collect(收集器.groupingBy(
AdditionalMetrics::getMasterId,
Collectors.toMap(AdditionalMetrics::getNodeKey,
附加度量:getNodeValue));

使用三个度量。我不知道如何使用三个度量,我会避免使用嵌套映射。相反,我将使用属性
masterId
nodeKey
equals
hashCode
实现创建一个
MetricsIdValueKey
,然后将其用于
映射
Map<String, Map<String, String>> result = additionalMetrics.stream()
        .collect(Collectors.groupingBy(
                AdditionalMetrics::getMasterId,
                Collectors.toMap(AdditionalMetrics::getNodeKey, 
                        AdditionalMetrics::getNodeValue)));