Tag: java stream

执行parallelStream.forEach(..)时本机java代码中的NullPointerException

我有以下exception(stacktrace): java.lang.NullPointerException at sun.reflect.GeneratedConstructorAccessor171.newInstance(Unknown Source) ~[?:?] at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_40] at java.lang.reflect.Constructor.newInstance(Constructor.java:422) ~[?:1.8.0_40] at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:598) ~[?:1.8.0_40] at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677) ~[?:1.8.0_40] at java.util.concurrent.ForkJoinTask.invoke(ForkJoinTask.java:735) ~[?:1.8.0_40] at java.util.stream.ForEachOps$ForEachOp.evaluateParallel(ForEachOps.java:160) ~[?:1.8.0_40] at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateParallel(ForEachOps.java:174) ~[?:1.8.0_40] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:233) ~[?:1.8.0_40] at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) ~[?:1.8.0_40] at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:583) ~[?:1.8.0_40] at com.tradair.tnet.services.trades.TradeService.updateUnrealizedPNL(TradeService.java:173) ~[tnet.jar:5.1.1.0-SNAPSHOT] 从我的TradeService类开始: public void updateUnrealizedPNL(Set orgsToCaluclate, Set orgsToSendUpdate) { orgsToCaluclate.parallelStream().forEach(o -> { pnlService.updateMidPrices(o); Collection allLiveTradesByOrgId = tradesRepository.getAllLiveTradesByOrgId(o.getId()); […]

使用Java Stream从一组集合中收集所有对象

我正在尝试学习Java Streams并尝试从HashSet<SortedSet>获取HashSet 。 HashSet students = getAllStudents(); HashSet<SortedSet> teachersForStudents = students.stream().map(Person::getTeachers).collect(Collectors.toCollection(HashSet::new)); HashSet = //combine teachers and students in one HashSet 我真的希望它将所有教师和所有学生组合在一个HashSet 。 当我收集我的流时,我想我做错了什么?

Java Streams – 从另外两个列表中获取“对称差异列表”

我试图使用Java 8流来组合列表。 如何从两个现有列表中获取“对称差异列表”(仅存在于一个列表中的所有对象)。 我知道如何获得交叉列表以及如何获取联合列表。 在下面的代码中,我想要来自两个汽车列表(bigCarList,smallCarList)的不相交的汽车。 我希望结果能够列出2辆车(“丰田卡罗拉”和“福特福克斯”) 示例代码: public void testDisjointLists() { List bigCarList = get5DefaultCars(); List smallCarList = get3DefaultCars(); //Get cars that exists in both lists List intersect = bigCarList.stream().filter(smallCarList::contains).collect(Collectors.toList()); //Get all cars in both list as one list List union = Stream.concat(bigCarList.stream(), smallCarList.stream()).distinct().collect(Collectors.toList()); //Get all cars that only exist in one list //List disjoint […]

使用groupingBy的类的属性的平面映射收集器

我有这门课。 class Assignment { private Integer index; private List quantities; } 然后,我有一个来自该类的对象列表。 List assignments = new ArrayList(); 有没有办法创建一个包含Assignment索引和List作为值的Map ? 这是我到目前为止所尝试的。 assignments.stream().collect(groupingBy(Assignment::getIndex)); 但这给了我一个Map<Integer, List> ,我想要一个Map<Integer, List> 。 我已经尝试过使用forEach方法 – 并且它有效 – 但我确信必须有一种方法可以在一个衬里中进行 – 或者至少只使用collect和groupingBy方法

使用流生成short

在使用连续的短裤范围填充列表的基础上,我尝试生成一组原始短裤。 事实certificate这比预期的要难得多。 Short[] range = IntStream.range(0, 500).mapToObj(value -> (short) value).toArray(Short[]::new)工作但是: short[] range = IntStream.range(0, 500).mapToObj(value -> (short) value).toArray(short[]::new)生成编译错误: method toArray in interface Stream cannot be applied to given types; required: IntFunction found: short[]::new reason: inference variable A has incompatible bounds equality constraints: short upper bounds: Object where A,T are type-variables: A extends Object declared in […]

使用基于Optional 内容的流

我从一个不受我控制的服务中得到一张可能为空的服务,并且想要处理它,比如说,过滤,映射和缩减为我需要的单个元素。 问题:从Optional到Stream是否有“链接”? 我试过(除其他外): return Optional.ofNullable(getMap()) .map(Map::entrySet) // gets the entryset .map(Stream::of) .orElseGet(Stream::empty) // i would then like to continue with .filter(e -> e.getKey().startsWith(“f”) .map(Entry::getValue) .findFirst(); 但后来我得不到Stream但是Stream<Set> …有没有办法以某种方式flatMap一个集合或地图的可选? 注意:我对这里流畅,纯粹的流/可选方法感兴趣。 当然,当我首先将地图保存到本地var并确保它不为空时,它会起作用。

stream()vs Stream.of

哪个是从集合中创建流的最佳方法: final Collection entities = someService.getArrayList(); entities.stream(); Stream.of(entities);

Java流 – 通过嵌套列表分组(按第二顺序列出)

我有以下数据结构 – 每个学生的名单,每个学生都拥有一个国家名单,每个国家都有一份城市名单。 public class Student { private int id; private String name; private List states = new ArrayList(); } public class State { private int id; private String name; private List Cities = new ArrayList(); } public class City { private int id; private String name; } 我想得到以下内容。 Map citiesIdsToStudensList; 我写了以下内容 Map<Integer, List> statesToStudentsMap […]

使用Collections.frequency()打印某些值

我有一个数组如下: int[] array = {11, 14, 17, 11, 48, 33, 29, 11, 17, 22, 11, 48, 18}; 我想要做的是找到重复的值,并打印出来。 所以我这样做的方法是转换为ArrayList ,然后Set并使用Set上的stream 。 ArrayList list = new ArrayList(array.length); for (int i = 0; i < array.length; i++) { list.add(array[i]); } Set dup = new HashSet(list); 然后我使用stream循环遍历它并使用Collections.frequency打印值。 dup.stream().forEach((key) -> { System.out.println(key + “: ” + Collections.frequency(list, key)); }); […]

Java 8复杂的自定义收集器

我有一个对象流,我想以下面的方式收集。 假设我们正在处理论坛post: class Post { private Date time; private Data data } 我想创建一个按期间对post进行分组的列表。 如果X分钟没有post,请创建新组。 class PostsGroup{ List posts = new ArrayList (); } 我想获得一个List其中包含按时间间隔分组的post。 例如:间隔10分钟。 post: [{time:x, data:{}}, {time:x + 3, data:{}} , {time:x+ 12, data:{}, {time:x + 45, data:{}}}] 我想获得一个post组列表: [ {posts : [{time:x, data:{}}, {time:x + 3, data:{}}, {time:x+ 12, data:{}]]}, {posts : […]