java - 基于java 8流中的前一个元素进行过滤
问题描述
我有一个特定的条件,我是否想通过与前一个元素进行比较来将列表分成两部分。情况是有一个名为 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 的单独列表。” 基于此
List<Object2> collect = IntStream.rangeClosed(1, objects.size()-1)
.filter(i -> objects.get(i - 1).firld1== 0)
.mapToObj(i -> objects.get(i))
.collect(Collectors.toList());
推荐阅读
- monitoring - 有效监控?如何避免交替疲劳?
- python - 如何使用 python 在 dialogflow CX 中传递查询参数
- c# - RadGridView 子行中的用户控件 - Telerik Winforms
- python-3.x - 是否可以使用 api 将数据框保存到 atlassian 页面?
- python - 在数据中查找最大值和最小值并将 True/False 附加到相应的行 - Python
- r - 如何在闪亮的应用程序中使用 renv 包以避免在闪亮的服务器上安装新包?
- javascript - 在 Javascript 中,如何在再次触发后停止触发的声音?
- python - 根据相应列值的聚合有条件地填充 NA
- amazon-web-services - Terraform - 超过 20k 个字符的 Cognito 邀请消息
- javascript - sql通过2种不同的方式在同一个请求键中调用2次相同的key_name