我知道,一旦集合的流操作为forEach-min-collect-code,该流即关闭,不再适用于进一步的函数调用。
我的问题是,如何避免“重复流操作”,以便我们可以在同一个集合上执行不同的流操作,而不需要重复计算?
例如。
public static void main(String[] args) {
List<Integer> ls = new ArrayList<>(Arrays.asList( 11, 9, 7, 11, 24, 13, 37, 16 ));
Stream<Integer> s1 = ls.stream().filter(x -> x > 10).sorted().distinct().limit(4).skip(2);
s1.forEach(System.out::println);
// java.lang.IllegalStateException: stream has already been operated upon or closed
System.out.println(s1.max((x, y) -> x < y ? y : x).get()); // s1 is no longer useable.
}
好吧,我知道为了得到s1。max我必须再次构建流,如下所示:
Stream<Integer> sAnother = ls.stream().filter(x -> x > 10).sorted().distinct().limit(4).skip(2);
这是可行的,但似乎是第二次做多余的工作。我希望我们可以使用这个调用序列,并使其只执行一次:
filter(x -> x > 10).sorted().distinct().limit(4).skip(2)
然后:(1)进行forEach打印元素。(2) 计算最大元素。
不必两次构造和计算整个流过程。
有办法做到这一点吗?谢谢。
Stream
只能使用一次,您对此无能为力。但是,您可以做的是将其收集到List
(stream.toList()
),然后使用该列表进行进一步执行-在您的情况下创建两个可以执行不同工作的新流。
问题内容: 如果某些东西无法正常工作,或者某些插件未在我的Eclipse中正确加载,我通常会建议您以干净模式打开Eclipse。 那么,如何在干净模式下运行?如果我这样做会怎样? 问题答案: 它能做什么: 如果设置为“ true”,则OSGi框架和eclipse运行时使用的所有缓存数据都将被清除。这将清除用于存储捆绑包依赖关系解析和Eclipse扩展注册表数据的缓存。使用此选项将强制eclipse
钱箱类: 商户类: 输入数据: 我的任务 计算每个商家的总金额并返回商家列表 我正在尝试使用Stream API解决这个任务。并编写了以下代码: 结果 但显然,流返回四个对象,而不是所需的两个对象。我意识到,地图(第二行)为每个cashBoxId创建了四个对象。而且我不知道如何通过进行过滤,也不知道如何获得没有重复的结果。
所以,我使用的是过滤流。不幸的是,每次我打开它,5分钟后它就会关闭,但在这段时间里,它会捕捉推文。我想做的是保持24/7,这样5分钟后就不会关机。此外,如果它断开连接,我希望如此,它会再次尝试连接。 这是我用来帮助调整代码的代码示例: https://github.com/twitterdev/Twitter-API-v2-sample-code/blob/master/Filtered-Stre
将浮点数转换为十进制数。例如,如果输入为12.345,则输出应为12345 ...所以这是我的解决方案: 我认为这个算法理论上是正确的,但实际上有些值对我不起作用!! 问题出在哪里,解决方案是什么,使我的程序正确工作?
我在这个项目中使用了导航图,并添加了BottomNavigation。因此,有一个navhostfragment管理这些所有片段。如果有人帮我实现用viewpager来实现像在img(进来,在厨房)一样的tablayout。我是否必须使嵌套图,如果是,可以请你帮助我理解NavGraph。
为什么编译器会抓狂?我应该能够修改返回的对象,如果java返回一个对象引用的权利?