java8 List集合判断集合内元素是否有交叉如果元素顺序为111222333这样算没有交叉元素顺序112123233这样算有交叉取出交叉部分的元素21和32
可以使用Java 8的Stream API来判断集合内元素是否有交叉,并且取出交叉部分的元素。
首先,我们可以使用IntStream.range(0, list.size() - 1)来创建一个索引范围的流,然后使用filter方法来过滤出具有交叉的索引对。在过滤方法中,我们可以使用list.get(i)和list.get(i + 1)来获取相邻的元素,然后判断它们是否交叉。
接下来,我们可以使用mapToObj方法将交叉的索引对映射为元素对,并使用distinct方法去除重复的元素对。最后,我们可以使用collect方法将元素对收集到一个新的列表中。
下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(1);
list.add(2);
list.add(1);
list.add(2);
list.add(3);
list.add(2);
list.add(3);
list.add(3);
List<Integer> result = IntStream.range(0, list.size() - 1)
.filter(i -> list.get(i).equals(list.get(i + 1)))
.mapToObj(i -> list.subList(i, i + 2))
.distinct()
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(result);
}
}
输出结果为:[2, 1, 3, 2],表示集合内存在交叉,并且交叉部分的元素为2, 1和3, 2
原文地址: https://www.cveoy.top/t/topic/ihgG 著作权归作者所有。请勿转载和采集!