【发布时间】:2019-01-25 04:42:35
【问题描述】:
我有一个Map<B, List<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);
现在我想遍历地图的 entrySet 并制作一个新地图,其中包含元素的列表,该元素是该条目的键的倍数。即输出应如下所示:
2L --> List of (2, 4)
3L --> List of (6)
4L --> List of (12)
5L --> empty List
过滤谓词使用映射条目键值来测试列表元素。如何在不修改原始地图的情况下实现这一点?
【问题讨论】:
-
与StreamEx:
EntryStream.of(map).flatMapValues(List::stream).filterKeyValue((k, v) -> v % k == 0).grouping()
标签: java-8 collectors