微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java-8 – 如何过滤一个List,它是java 8中Map条目的值?

我有一张地图< 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())));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐