首页 > 解决方案 > 使用java流,将两个具有相同键但不同值的映射合并到一个元组?

问题描述

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

Map<Pair<Long,String>, List<String>>  stringValues;
Map<Pair<Long,String>, List<Boolean>>  booleanValues ;

我想将上面的地图合并到下面的数据结构中

Map<Pair<Long,String>, Pair<List<String>,List<Boolean>>>  stringBoolValues;

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

标签: javajava-8streamjava-stream

解决方案


其他简单的方法是这样的:

stringValues.forEach((key, value) -> {
        Pair<List<String>, List<Boolean>> pair = new Pair<>(value, booleanValues.get(key));
        stringBoolValues.put(key, pair);
});

stringBoolValues = stringValues
            .entrySet()
            .stream()
            .collect(Collectors.toMap(Map.Entry::getKey, 
  entry -> new Pair<>(entry.getValue(), booleanValues.get(entry.getKey()))));

试试这样:

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))));

推荐阅读