首页 > 解决方案 > 仅返回具有最大找到长度的元素 java 流

问题描述

我正在尝试执行以下操作:

1) 从符合条件的集合中获取元素 2) 根据长度对其进行排序 3) 仅返回具有最大长度的元素

所以例如

List<String> list = new ArrayList();
list.add("xone");
list.add("two");
list.add("xthree");
list.add("xseven");

使用流我可以创建:

list.stream()
    .filter( e -> e.startsWith("x"))
    .sort( e -> e.length() )
    .collect(..)

但是,这只是对其进行排序..有什么漂亮的方法可以仅返回具有最大找到长度的元素吗?在这种情况下,它将是“xthree”和“xseven”

感谢帮助!

标签: javajava-stream

解决方案


编写这些操作的稍微紧凑的方法groupingBy如下 -

TreeMap<Integer, List<String>> map = new TreeMap<>(list.stream()
        .collect(Collectors.groupingBy(String::length)));
List<String> maxLengthStrings = map.lastEntry().getValue();

推荐阅读