java-8 – 如何过滤一个List,它是java 8中Map条目的值?
发布时间:2020-12-15 08:28:39 所属栏目:Java 来源:网络整理
导读:我有一张地图 B,列表 A.我想基于一些依赖于类型B的映射条目的键的谓词来过滤掉一些A.例如,这里是我的数据结构: ListInteger list1 = Arrays.asList(5,2,3,4);ListInteger list2 = Arrays.asList(5,6,7,8);ListInteger list3 = Arrays.asList(9,10,11,12,13)
我有一张地图< B,列表< A>>.我想基于一些依赖于类型B的映射条目的键的谓词来过滤掉一些A.例如,这里是我的数据结构:
List<Integer> list1 = Arrays.asList(5,2,3,4); List<Integer> list2 = Arrays.asList(5,6,7,8); List<Integer> list3 = Arrays.asList(9,10,11,12,13); List<Integer> list4 = Arrays.asList(11,23,112); Map<Long,List<Integer>> map = new HashMap<>(); map.putIfAbsent(2L,list1); map.putIfAbsent(3L,list2); map.putIfAbsent(4L,list3); map.putIfAbsent(5L,list4); 现在我想遍历map的entrySet并创建一个新的map,其中包含的元素是该条目的键的倍数.即输出应如下所示: 2L --> List of (2,4) 3L --> List of (6) 4L --> List of (12) 5L --> empty List 过滤谓词使用映射条目键值来测试列表元素.如何在不修改原始地图的情况下实现此目的? 解决方法
这是解决问题的一种方法,通过流式传输原始地图中的条目,并使用键和筛选列表创建新地图:
Map<Long,List<Integer>> newMap = map.entrySet().stream() .collect(Collectors.toMap(Map.Entry::getKey,entry -> entry.getValue().stream() .filter(value -> value % entry.getKey() == 0) .collect(Collectors.toList()))); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |