首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用java streams,将具有相同键但不同值的两个映射合并到一个元组中?

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

Stack Overflow用户
提问于 2018-08-23 12:36:21
回答 1查看 662关注 0票数 2

我有两个具有以下数据类型的映射,

代码语言:javascript
复制
Map<Pair<Long,String>, List<String>>  stringValues;
Map<Pair<Long,String>, List<Boolean>>  booleanValues ;

我想将上面的映射合并到下面的数据结构中

代码语言:javascript
复制
Map<Pair<Long,String>, Pair<List<String>,List<Boolean>>>  stringBoolValues;

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

EN

回答 1

Stack Overflow用户

发布于 2018-08-23 12:53:18

前提条件:您已经为Pair<Long, String>正确覆盖了equals()/hashCode()

代码语言:javascript
复制
Map<Pair<Long,String>, Pair<List<String>,List<Boolean>>>  stringBoolValues
   = Stream.of(stringValues.keySet(),booleanValues.keySet())
      .flatMap(Set::stream)
      .map(k -> new SimpleEntry<>(k, Pair.of(stringValues.get(k), booleanValues.get(k))) 
      .collect(toMap(Entry::getKey, Entry::getValue));

其中,Pair.of是:

代码语言:javascript
复制
public static Pair<List<String>,List<Boolean>> of(List<String> strs, List<Boolean> bls) {
    List<String> left = Optional.ofNullable(strs).orElseGet(ArrayList::new);
    List<Boolean> right = Optional.ofNullable(bls).orElseGet(ArrayList::new);
    return new Pair<>(left, right);
}

您甚至可以使用Map.computeIfAbsent来避免显式地检查null。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51978383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档