【问题标题】:Create map of matching elements in two lists在两个列表中创建匹配元素的映射
【发布时间】:2019-10-14 14:31:56
【问题描述】:

我有两个列表。我想创建一个地图,其中 true 用于匹配元素,false 用于 java 8 中的唯一元素。
例如
输入-

列表 1 = [A,B,C,D]
清单 2 = [B,C,Y,Z]

输出-

地图

A,假

B,真

C,真

D,假

我的代码:

Map<String,Boolean> map = new HashMap<>();
            for(String var1 : list1) {
                boolean value;
                if (CollectionUtils.isNotEmpty(list2)) {
                    Optional<String> valueOptional = list2.stream()
                            .filter(e1 -> e1.equalsIgnoreCase(var1))
                            .findAny();
                    value = valueOptional.isPresent();
                    map.put(var1, value);
                }
            }

【问题讨论】:

标签: java lambda collections java-8 java-stream


【解决方案1】:

首先,使用第二个列表创建一个Set。然后使用toMap 收集器创建以字符串为键的映射,它存在于 setTwo 作为值。这是它的外观。

Set<String> setTwo = new HashSet<>(listTwo);
Map<String, Boolean> existenceMap = listOne.stream()
    .collect(Collectors.toMap(s -> s, setTwo::contains, (a, b) -> a));

【讨论】:

    【解决方案2】:

    我会推荐使用布尔键和值作为列表的映射

    Map<Boolean, List<String>> map = list1.stream()
                                          .collect(Collectors.partitioningBy(list2::contains));   // or set::contains
    

    【讨论】:

      猜你喜欢
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 2015-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多