在两个列表中创建匹配元素的映射

时间:2019-10-14 14:31:56

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

我有两个列表。我想创建一个地图,该地图的匹配元素为 true ,而Java 8中的唯一元素为 false
例如
输入-

  

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

输出-

  

地图

     

A,错误

     

B,是

     

C,是

     

D,false

我的代码:

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

2 个答案:

答案 0 :(得分:6)

首先,使用第二个列表创建一个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));

答案 1 :(得分:2)

我建议使用布尔键和值作为列表的映射

class MyBottomSheet : BottomSheetDialogFragment() {

companion object {
    fun newInstance() = MyBottomSheet().apply {
        isCancelable = false
      }
   }
}