如何使用java 8流将列表元素相互比较

时间:2017-12-17 11:54:36

标签: java list java-8 filtering java-stream

我有一个包含随机单词的列表,我想过滤所有长度相同或首字母相同的单词?

如何使用java 8流在列表中相互检查元素?

1 个答案:

答案 0 :(得分:4)

检索以特定字母/单词开头的字符串列表:

List<String> resultSet = myList.stream()
                .filter(x -> x.startsWith("a"))
                .collect(Collectors.toList());

要保留所有长度相同的字符串的记录,请考虑使用groupingBy收集器。

 Map<Integer, List<String>> resultSet = myList.stream()
            .collect(Collectors.groupingBy(String::length));

如果您确切知道您感兴趣的字符串的长度,那么您可以这样做:

List<String> resultSet = myList.stream()
                .filter(x -> x.length() == 5)
                .collect(Collectors.toList());

此外,您可以组合两个过滤器操作来维护具有特定长度的字符串列表或具有特定字/字母的开头:

List<String> resultSet = myList.stream()
                               .filter(x -> x.startsWith("a") ||
                                         x.length() == 5)
                               .collect(Collectors.toList());