Java 是否可以在流函数中使用当前流函数?

Java 是否可以在流函数中使用当前流函数?,java,Java,例如,我有一些字符串。我想按空间分割,然后只过滤长度大于流计数的单词。请参阅下面的代码 Arrays.stream("Some important string".split(" ")) .filter(word->word.length>([HOW GET HERE STREAM COUNT??])) 任务是在一行中完成(没有外部变量)这是一个黑客,我强烈反对使用,但您可以这样做: String[]result=Stream.o

例如,我有一些字符串。我想按空间分割,然后只过滤长度大于流计数的单词。请参阅下面的代码

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

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

这是一个黑客,我强烈反对使用,但您可以这样做:

String[]result=Stream.of(“要测试的一些重要字符串”).split(“”)
.flatMap(words->Stream.of(words).filter(word->word.length()>words.length))
.toArray(字符串[]::新建);
System.out.println(Arrays.toString(result));
如果只使用一个变量,代码会更好:

String[]words=“一些要测试的重要字符串”。拆分(“”);
String[]result=Stream.of(字)
.filter(word->word.length()>words.length)
.toArray(字符串[]::新建);
System.out.println(Arrays.toString(result));
两者的输出

[重要信息,字符串]

如果问题不是关于如何处理由
split()
返回的数组,而是实际问题“如何获取流计数”,那么答案是不能

即使您有权访问流,您也不能调用,因为这会消耗流并违背调用的目的。

没关系

一个流只能迭代一次,因此如果对该流调用
.count()
,则不能再调用
.filter()

下面是一个笨拙的示例,它在表达式
filter()
s it中的流上使用
count()

Stream.of(Arrays.stream("Some important string".split(" ")))
   .map(s -> s.filter(x -> x.length() > s.count())).findAny().get().toArray();
以下是可预测的结果:

Exception in thread "main" java.lang.IllegalStateException:
    stream has already been operated upon or closed
  at java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203)
线程“main”java.lang.IllegalStateException中的异常: 流已被操作或关闭 位于java.util.stream.AbstractPipeline。(AbstractPipeline.java:203)
您的意思是要将字数与每个单词的长度进行比较吗?是的。在我的案例中,字数是流计数:为什么要用
String
作为参数调用
newstring()
?不要那样做!!有一种方法
Stream.of(“某个重要字符串”).map(e->e.split(“”)。map(e->Arrays.Stream(e)。filter(w->w.length()>e.length)。collect(Collectors.toList())。findFirst().get()
,就像我说的:如果不做一些事情,就可以创建其他变量。这个解决方案只是定义一个名为
e
的新变量,其中包含数组。@fps谢谢,好多了。