Tag: java stream

Java 8并行stream中的自定义线程池

是否有可能为Java 8 并行stream指定自定义线程池? 我找不到任何地方。 想象一下,我有一个服务器应用程序,我想使用并行stream。 但是,应用程序是大型的,multithreading的,所以我想划分它。 我不想在另一个模块的应用程序块任务的一个模块中运行缓慢的任务。 如果我不能为不同的模块使用不同的线程池,这意味着我不能在大多数现实世界的情况下安全地使用并行stream。 试试下面的例子。 有一些CPU密集型任务在单独的线程中执行。 任务利用并行stream。 第一个任务是打破的,所以每一步需要1秒钟(由线程睡眠模拟)。 问题是其他线程卡住,等待中断的任务完成。 这是人为的例子,但想象一下,一个servlet应用程序和一个长期运行的任务提交给共享fork连接池的人。 public class ParallelTest { public static void main(String[] args) throws InterruptedException { ExecutorService es = Executors.newCachedThreadPool(); es.execute(() -> runTask(1000)); //incorrect task es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.shutdown(); es.awaitTermination(60, TimeUnit.SECONDS); } private […]

使用带有lambda的JDK8压缩stream(java.util.stream.Streams.zip)

在带有lambda b93的JDK 8中,在b93中有一个java.util.stream.Streams.zip类,可用于压缩stream(这在“ 探索Java8 Lambdas第1部分”中由Dhananjay Nene说明 )。 这个function: 创build一个惰性的顺序组合stream,其元素是组合两个stream的元素的结果。 然而在B98中这个消失了。 事实上Streams类在b98的java.util.stream中甚至是不可访问的。 这个function是否已经被移动,如果是的话,我应该如何使用b98简洁地压缩数据stream? 我想到的应用程序是在这个沉的java实现 ,我在那里取代了zip的function static <T> boolean every(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) static <T> T find(Collection<T> c1, Collection<T> c2, BiPredicate<T, T> pred) function相当详细的代码(它不使用b98的function)。

用谓词限制stream

是否有一个Java 8stream操作限制(可能是无限的) Stream直到第一个元素无法匹配一个谓词? 在下面的例子中看起来像(不存在的) takeWhile操作,并打印所有小于10的数字? IntStream .iterate(1, n -> n + 1) .takeWhile(n -> n < 10) .forEach(System.out::println); 如果没有这样的操作,通用的方法是什么?