【问题标题】:How to compare elements of list with each other with java 8 stream [closed]如何使用java 8流将列表元素相互比较[关闭]
【发布时间】:2018-05-30 23:48:07
【问题描述】:

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

如何在带有 java 8 流的列表中相互检查元素?

【问题讨论】:

  • myList.stream() .filter(x -> x.startsWith("xxx") || x -> x.length() == SIZE) .collect(Collectors.toList());
  • 很多 问题,例如“按条件过滤流”,我确信它是重复的。你遇到了什么问题?你试过什么?
  • “相同长度”是什么? “相同的第一个字母”是什么?彼此?如果列表是"Can", "You", "Take", "Care",则有两个长度为 3 的单词和两个长度为 4 的单词。你如何通过“相同长度的单词”过滤?请注意,过滤分组是完全不同的操作。

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


【解决方案1】:

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

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());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多