首页 > 解决方案 > 是否可以在流函数中使用当前的流函数?

问题描述

例如我有一些字符串。我想将其按空格拆分,然后仅过滤长度大于流数的单词。请参阅下面的代码

Arrays.stream("Some important string".split(" "))
      .filter(word->word.length>([HOW GET HERE STREAM COUNT??]))

任务是在一行中完成(没有外部变量)

标签: java

解决方案


这是一个hack,我强烈反对使用,但你可以这样做:

String[] result = Stream.<String[]>of("Some important strings to test".split(" "))
        .flatMap(words -> Stream.of(words).filter(word -> word.length() > words.length))
        .toArray(String[]::new);

System.out.println(Arrays.toString(result));

如果你只使用一个变量,代码会好得多:

String[] words = "Some important strings to test".split(" ");
String[] result = Stream.of(words)
        .filter(word -> word.length() > words.length)
        .toArray(String[]::new);

System.out.println(Arrays.toString(result));

两者的输出

[important, strings]

如果问题不是关于如何使用由返回的数组来执行此操作split(),而是实际上是字面问题“如何获取流计数”,那么答案是您不能。

即使您可以访问流,也不能调用count(),因为这会消耗流并违背调用的目的。


推荐阅读