【问题标题】:How to save this stream thing into a variable如何将此流的东西保存到变量中
【发布时间】:2020-11-16 06:46:39
【问题描述】:
我正在打印这个功能。
listaITSAV.stream().sorted().forEach(System.out::println);
但我想将此列表的排序保存在一个变量中,然后打印包含排序的变量。
注意:ListaITSAV 是一个 LinkedList
LinkedList<String> listaITSAV = new LinkedList<String>();
【问题讨论】:
标签:
java
sorting
lambda
functional-programming
stream
【解决方案1】:
您可以使用peek() 并阅读此question 以了解更多信息。
listaITSAV.stream().sorted().peek(System.out::println).collect(Collectors.toList());
【解决方案2】:
一种方法是将流本身存储在一个变量中。
Stream<String> stream = listaITSAV.stream().sorted();
//...some code...
stream.forEach(System.out::println);
注意:如果流已经被操作或关闭,我们不能对它执行任何进一步的操作。
例如,尝试做这样的事情:
stream.forEach(System.out::println);
stream.forEach(System.out::println);
将导致 java.lang.IllegalStateException
消息,流已被操作或关闭。 p>
【解决方案3】:
假设 listalTSAV 已经声明,而不是 null,并且填充了您想要排序的所有值,您可以简单地收集结果并重新分配回变量,如果它不是 final 像这样:
LinkedList<String> listaITSAV = new LinkedList<>();
…
listaITSAV = listaITSAV.stream().sorted().collect(Collectors.toCollection(LinkedList::new));
这里是 Collectors#toCollection 的 Oracle documentation。