【发布时间】:2019-12-26 00:26:46
【问题描述】:
我有一个特定的条件,我是否想通过与前一个元素进行比较来将列表分成两部分。情况是有一个名为 field1 的字段,我需要将所有元素分组到另一个列表中,其中先前的元素 field1 为 0。我在 collect 或 groupingBy/partitioningBy 中看不到任何选项来提供与先前元素进行比较的方法。
private List<Class2> mapClasses(List<Class1> l1) {
l1.sort(comparingInt(Class1::getField1());
List<Class1> list1= new ArrayList<>();
List<Class1> list2 = new ArrayList<>();
for (int i = 0; i < l1.size(); i++) {
if (i == 0 && isOk(l1.get(0))) {
consecutiveClasses.add(l1.get(0));
} else if (i > 0 && isOk(l1.get(i - 1))) {
consecutiveClasses.add(l1.get(i));
} else {
nonConsecutiveClasses.add(l1.get(i));
}
}
List<Class2> collapsedClass2s = mapNonConsecutiveClasses(nonConsecutiveClass2s);
mapConsecutiveClasses(consecutiveClasses).ifPresent(collapsedClasses::add);
return collapsedClasses;
}
private boolean m2(Class1 current, Class1 previous) {
return (current.isLocked() && previous.isLocked()) || (!current.isLocked() && !previous.isLocked());
}
有没有办法使用 Java 8 流来做到这一点?
【问题讨论】:
-
给我们一个例子和预期的结果。它将帮助我们为您提供解决方案。我不确定您是否想在看到一个具有前一个元素且开始时间为 0 的元素时立即停止
-
显而易见的方法只是掩饰 for 循环而没有真正添加任何东西。如果您想并行执行,我认为您最好直接使用带有 for 循环的 fork-join 框架。
-
哦,Guava 显然有 zip,您认为它对将列表压缩到被元素截断的自身很有用。
-
从订单列表中,我只想提取其前一个元素的 startTime 字段设置为 0 的单独列表。
标签: java java-8 java-stream