草庐IT

java - 为什么我应该在带有收集的并行流中使用并发特性?

为什么我应该在带有收集的并行流中使用并发特性:Listlist=Collections.synchronizedList(newArrayList(Arrays.asList(1,2,4)));Mapcollect=list.stream().parallel().collect(Collectors.toConcurrentMap(k->k,v->v,(c,c2)->c+c2));而不是:Mapcollect=list.stream().parallel().collect(Collectors.toMap(k->k,v->v,(c,c2)->c+c2));换句话说,不使用这个特性有

Java 8 Stream.findAny() 与在流中查找随机元素

在我的Spring应用程序中,我有一个文档类型为QuoteOfTheDay的Couchbase存储库。.该文档非常基础,只有一个UUID类型的id字段、String类型的value字段和Date类型的创建日期字段。在我的服务类中,我有一个返回当天随机报价的方法。最初我尝试简单地执行以下操作,它返回了一个Optional类型的参数,但似乎findAny()几乎总是返回流中的相同元素。目前只有大约10个元素。publicOptionalrandom(){returnStreamSupport.stream(repository.findAll().spliterator(),false).

java - 使用单一方法获取功能性 Java 流中的主要因素?

此方法将接受Long并返回LongStream传递给该方法的任何数字的质数。factors.javapublicLongStreamfactors(longx){LongStreamfactorStream=LongStream.range(1,x+1).filter(n->x%n==0);returnfactorStream;}利用上面的方法先求公因数ok。primeFactors.javapublicLongStreamprimeFactors(longx){LongStreamprimeFactorStream=factors(x).filter(n->factors(n).co

java - 在 Java 8 中,当流中有重复键时如何收集到一个 Map 中形成一个值列表

我有一个二维数组或EntrySet形式的元素流。我需要将这些收集到Map中。现在的问题是元素流可以有重复的元素。假设我希望值是一个列表:Map>例子:classMapUtils{//FunctiontogetStreamofString[]privatestaticStreamgetMapStream(){returnStream.of(newString[][]{{"CAR","Audi"},{"BIKE","HarleyDavidson"},{"BIKE","Pulsar"}});}//ProgramtoconvertStreamtoMapinJava8publicstaticvo

java - 如何在 java 8 流中使用一对多映射?

在Stream的map函数中,我们可以将一个对象转换为另一个对象,因此我们可以隐藏一个包含3个A类型元素的Stream到另一个B类型的3个元素的Stream。如何将AStream类型的3个元素转换为BStream类型的6个或更多元素取决于条件?在代码方面。我们可以做到Streamconverted=original.map(a->newB(a));但是我们怎样才能喜欢跟随呢?Steamconverted=original.map(a->{if(a.split()){return[newB(a),newB(a)];}elsereturnnewB(a);});我无法找到并理解如何做到这一点

java - 使用可选处理 java 流中的 null

如果我们有如下的senario,那么处理null的最佳方式是什么//mockingfordemonstratonstudentsByCourseRoster.setUsers(null);studentsByCourseRoster.getUsers().stream().forEach(user->{finalUserDTOv2userDTO=newUserDTOv2();userDTO.populateUserDataFromUserDTO(user,groupedUsers);users.add(userDTO);}); 最佳答案

java - 在流中处理空指针和抛出异常

让我们考虑一个Parent类,它只包含一个Integer属性。我创建了6个父类对象和一个空变量。然后我将这些对象添加到列表中。我想通过Integer属性的值来检索对应的对象。我为此使用了Java8Streams。Predicatepredicate=e->e.getId()==100;//sampleattributevalueresult=list.stream().filter(predicate).collect(Collectors.toList());但是我遇到了NullPointerException,所以我编辑了代码:list.stream().filter(h->h!=

java - 如何在 foreach 方法中从流中删除对象?

我必须数组:arrA和arrB。arrA和arrB是不同类型的对象列表,add函数将对象A转换为对象B。我想将每个对象从arrA添加到arrB并从arrA中删除该对象。我试图通过流来做到这一点:arrA.stream().foreach(c->{arrB.add(c);arrA.remove(c);});当我执行此操作时,会发生两件事:并非所有对象都从arrA传递到arrB。在几次迭代后抛出空指针异常。我猜这是因为数组的长度在每次remove()调用后减少并且迭代计数器增加(只有奇数索引下的对象被传递给arrB)现在我可以通过在一个流调用中复制数组然后在第二个流调用中删除对象来解决这个

java - 使用 amqp 从队列中多路分解消息以在并行流中处理?

我想弄清楚我是否可以从阻塞场景切换到更具react性的模式。我有传入的更新命令到达队列,我需要按顺序处理它们,但只处理那些与同一实体有关的命令。本质上,只要没有两个流包含关于同一实体的事件,我就可以创建任意数量的并行更新事件流。我在想,主队列的消费者可能能够利用amqp的路由机制和临时队列,通过为每个实体ID创建临时队列,并将消费者挂接到它们。一旦订阅者完成并且队列中当前没有关于所讨论实体的其他事件,队列就可以被处理掉。这种情况是否经常使用?有没有更好的方法来实现这一目标?在我们当前的系统中,我们使用基于id的命名锁来防止并发更新。 最佳答案

java - 并行流中 I/O 代码的 SecurityException

这个我没办法解释,但是我在别人的代码中发现了这个现象:importjava.io.IOException;importjava.io.UncheckedIOException;importjava.nio.file.Files;importjava.util.stream.Stream;importorg.junit.Test;publicclassTestDidWeBreakJavaAgain{@TestpublicvoidtestIoInSerialStream(){doTest(false);}@TestpublicvoidtestIoInParallelStream(){doT