基于Java8流中前一个元素的过滤

基于Java8流中前一个元素的过滤,java,java-8,java-stream,Java,Java 8,Java Stream,我有一个特定的条件,是否要通过与前面的元素进行比较将列表分成两部分。情况是,有一个名为field1的字段,我需要将所有元素分组到另一个列表中,前面的元素field1为0。我看不到collect或groupingBy/PartitionBy中有任何选项可以提供与前一个元素进行比较的方法 private List<Class2> mapClasses(List<Class1> l1) { l1.sort(comparingInt(Class1::getFie

我有一个特定的条件,是否要通过与前面的元素进行比较将列表分成两部分。情况是,有一个名为field1的字段,我需要将所有元素分组到另一个列表中,前面的元素field1为0。我看不到collect或groupingBy/PartitionBy中有任何选项可以提供与前一个元素进行比较的方法

 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());
    }

私有列表映射类(列表l1){
l1.sort(comparingit(Class1::getField1());
List list1=新的ArrayList();
List list2=新的ArrayList();
对于(int i=0;i0&&isOk(l1.get(i-1))){
连续类.add(l1.get(i));
}否则{
非secutiveclass.add(l1.get(i));
}
}
列表collapsedClass2s=MapNonCosecutiveClass(NonCosecutiveClass2S);
MapConcertiveClasses(ConcertiveClasses).ifPresent(collapsedClasses::add);
返回折叠类;
}
私有布尔m2(当前类别1,以前类别1){
返回(current.isLocked()&&previous.isLocked())| |(!current.isLocked()&&previous.isLocked());
}
有没有一种方法可以用Java 8 streams实现这一点?

“从对象列表中,我只想提取一个单独的列表,其上一个元素的字段设置为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());
List collect=IntStream.rangeClosed(1,objects.size()-1)
.filter(i->objects.get(i-1).firld1==0)
.mapToObj(i->objects.get(i))
.collect(Collectors.toList());

给我们一个示例和预期结果。它将帮助我们为您提供解决方案。我不确定您是否希望在看到前一个元素的开始时间为0的元素时立即停止。明显的方法只是隐藏for循环,而不真正添加任何内容。如果您希望并行执行,我认为您最好直接执行t他用fork-join框架和for循环。哦,而且,Guava显然有zip,你会发现它很有用,可以将列表压缩到被元素截断的自身。从订单列表中,我只想提取一个单独的列表,其上一个元素的startTime字段设置为0。