Java Streams,仅过滤前“N”个匹配项

编码

有什么方法可以使用java流仅过滤前“n”个匹配项?

例如,如果我们有这个代码:

List<String> words = Arrays.asList("zero","one","two","three","four","five","one","one");

List<String> filteredWords = words.stream()
                .filter(word->!word.equals("one"))//filter all "one" strings..
                .collect(Collectors.toList());

System.out.println(filteredWords);

这将从单词流中过滤所有“一”字符串。

那么,如何过滤前“n”个匹配项并保持流的其余部分完整无缺?

换句话说,如果 n=1 那么程序应该输出

"zero","two","three","four","five","one","one"

如果 n=2 那么

“零”、“二”、“三”、“四”、“五”、“一”

盘子

您可以创建一个类为您进行过滤

class LimitedFilter<T> implements Predicate<T> {
    int matches = 0;
    final int limit;
    private Predicate<T> delegate;
    public LimitedFilter<T>(Predicate<T> p, int limit) { 
        delegate = p; this.limit = limit;
    }
    public boolean test(T toTest) {
        if (matches > limit) return true;
        boolean result = delegate.test(toTest);
        if (result) matches++;
        return result;
    }
}

然后用它来过滤

Predicate<String> limited = new LimitedFilter<>(w -> !"one".equals(w), 5);
List<String> filteredWords = words.stream()
            .filter(limited) //filter first five "one" strings..
            .collect(Collectors.toList());

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用awk仅打印第n个匹配项

来自分类Dev

使用awk仅打印第n个匹配项

来自分类Dev

如何从 kNeighborsClassifier 中找到前 n 个匹配项?

来自分类Dev

仅返回过滤器的第二个匹配项

来自分类Dev

Java的8个流,如何获得前N个计数?

来自分类Dev

如何使用Java仅列出目录中的N个文件

来自分类Dev

Java Regex只给出首个或最后一个匹配项,而不是全部

来自分类Dev

使用Regex和Java查找第一个匹配项

来自分类Dev

返回Java 8流中的第一个匹配项(类似于_.find)

来自分类Dev

使用Java SDK 2查询超过100个与分区键匹配的DynamoDB项?

来自分类Dev

根据条件(Java / Guava)从列表中提取第一个匹配项?

来自分类Dev

Java .split-删除第一个匹配项

来自分类Dev

返回Java 8流中的第一个匹配项(类似于_.find)

来自分类Dev

Java 中的正则表达式——只返回最后一个匹配项

来自分类Dev

Java中的模糊匹配重复项

来自分类Dev

Java OpenCV-从knnMatch提取匹配项

来自分类Dev

Java中的模糊匹配重复项

来自分类Dev

java Matcher返回整个匹配项

来自分类Dev

Java正则表达式仅匹配1到5个星号

来自分类Dev

如何仅获得正则表达式Grok过滤器的第一个匹配项

来自分类Dev

Java:仅替换完全匹配的URL

来自分类Dev

每N行仅使用第一个匹配项

来自分类Dev

MySQL仅返回具有n个属性匹配项的项目

来自分类Dev

如何检查Java 8 Streams中是否存在重复项?

来自分类Dev

Java 8 Streams过滤器惰性评估的意图

来自分类Dev

Java 8 Streams在过滤地图后获取原始对象

来自分类Dev

Java 8 Streams在过滤地图后获取原始对象

来自分类Dev

从右到左获取字符串中子字符串的下一个匹配项(Java)

来自分类Dev

比较2个列表,然后使用Java8将匹配项添加到对象映射中

Related 相关文章

  1. 1

    使用awk仅打印第n个匹配项

  2. 2

    使用awk仅打印第n个匹配项

  3. 3

    如何从 kNeighborsClassifier 中找到前 n 个匹配项?

  4. 4

    仅返回过滤器的第二个匹配项

  5. 5

    Java的8个流,如何获得前N个计数?

  6. 6

    如何使用Java仅列出目录中的N个文件

  7. 7

    Java Regex只给出首个或最后一个匹配项,而不是全部

  8. 8

    使用Regex和Java查找第一个匹配项

  9. 9

    返回Java 8流中的第一个匹配项(类似于_.find)

  10. 10

    使用Java SDK 2查询超过100个与分区键匹配的DynamoDB项?

  11. 11

    根据条件(Java / Guava)从列表中提取第一个匹配项?

  12. 12

    Java .split-删除第一个匹配项

  13. 13

    返回Java 8流中的第一个匹配项(类似于_.find)

  14. 14

    Java 中的正则表达式——只返回最后一个匹配项

  15. 15

    Java中的模糊匹配重复项

  16. 16

    Java OpenCV-从knnMatch提取匹配项

  17. 17

    Java中的模糊匹配重复项

  18. 18

    java Matcher返回整个匹配项

  19. 19

    Java正则表达式仅匹配1到5个星号

  20. 20

    如何仅获得正则表达式Grok过滤器的第一个匹配项

  21. 21

    Java:仅替换完全匹配的URL

  22. 22

    每N行仅使用第一个匹配项

  23. 23

    MySQL仅返回具有n个属性匹配项的项目

  24. 24

    如何检查Java 8 Streams中是否存在重复项?

  25. 25

    Java 8 Streams过滤器惰性评估的意图

  26. 26

    Java 8 Streams在过滤地图后获取原始对象

  27. 27

    Java 8 Streams在过滤地图后获取原始对象

  28. 28

    从右到左获取字符串中子字符串的下一个匹配项(Java)

  29. 29

    比较2个列表,然后使用Java8将匹配项添加到对象映射中

热门标签

归档