Java 8 List 集合元素交叉判断与提取 - Stream API 示例
可以使用Java 8的Stream API来判断集合内元素是否有交叉,并取出交叉部分的元素。下面是一个示例代码:
import java.util.ArrayList;
import java.util.List;
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);
boolean hasIntersection = list.stream()
.collect(ArrayList<Integer>::new, (result, element) -> {
if (result.isEmpty() || result.get(result.size() - 1) != element) {
result.add(element);
}
}, (result1, result2) -> {})
.size() != list.size();
System.out.println("Has intersection: " + hasIntersection);
List<Integer> intersection = list.stream()
.collect(ArrayList<Integer>::new, (result, element) -> {
if (result.size() < 2 && (result.isEmpty() || result.get(result.size() - 1) != element)) {
result.add(element);
}
}, (result1, result2) -> {})
.subList(0, 2);
System.out.println("Intersection: " + intersection);
}
}
输出结果:
Has intersection: true
Intersection: [2, 1]
这段代码首先通过Stream API判断集合内元素是否有交叉,然后利用Stream API取出交叉部分的元素。在判断交叉的过程中,使用了一个辅助列表result来保存结果,如果当前元素与列表最后一个元素不相同,则将当前元素添加到result中。最后,通过判断辅助列表的大小是否与原列表大小相等来判断是否有交叉。在取出交叉部分的元素时,首先判断列表大小是否小于2,并且当前元素与列表最后一个元素不相同,如果满足条件,则将当前元素添加到result中。最后,通过subList(0, 2)方法来取出交叉部分的前2个元素。
原文地址: https://www.cveoy.top/t/topic/pZwA 著作权归作者所有。请勿转载和采集!