使用 java 流,将具有相同键但不同值的两个映射合并到一个元组?

rag*_*nkl 2 java stream java-8 java-stream

我有两个具有以下数据类型的地图,

Map<Pair<Long,String>, List<String>>  stringValues;
Map<Pair<Long,String>, List<Boolean>>  booleanValues ;
Run Code Online (Sandbox Code Playgroud)

我想将上述地图合并到以下数据结构

Map<Pair<Long,String>, Pair<List<String>,List<Boolean>>>  stringBoolValues;
Run Code Online (Sandbox Code Playgroud)

我的输入有两个具有相同键但不同值的映射。我想将它们组合成一对。我可以使用 java 流来实现这一点吗?

Had*_*i J 5

另一个简单的方法是这样的:

stringValues.forEach((key, value) -> {
        Pair<List<String>, List<Boolean>> pair = new Pair<>(value, booleanValues.get(key));
        stringBoolValues.put(key, pair);
});
Run Code Online (Sandbox Code Playgroud)
stringBoolValues = stringValues
            .entrySet()
            .stream()
            .collect(Collectors.toMap(Map.Entry::getKey, 
  entry -> new Pair<>(entry.getValue(), booleanValues.get(entry.getKey()))));
Run Code Online (Sandbox Code Playgroud)

像这样尝试:

Set<Pair<Long,String>> keys = new HashSet<>(stringValues.keySet());
keys.addAll(booleanValues.keySet());

keys.stream().collect(Collectors.toMap(key -> key, 
           key -> new Pair<>(stringValues.get(key), booleanValues.get(key))));
Run Code Online (Sandbox Code Playgroud)