Java 我如何处理集合的并集?
有没有最佳的方法来获得Java 我如何处理集合的并集?,java,list,set,combinations,set-union,Java,List,Set,Combinations,Set Union,有没有最佳的方法来获得n集合的所有并集 这就是我所做的,但对于大量场景来说,速度非常慢: publicstaticvoidmain(字符串[]args){ List unionSet=new ArrayList(); 列表集=。。。 双重效用=0; 对于(int i=1;i,您可以使用以下方法: 如果有集合列表,则可以将其元素(即集合)展平为一组唯一值: 列表集合列表= (第(1,2,3)组,第(2,3,7)组)列表; Set=setList.stream() .flatMap(集合::流) .
n
集合的所有并集
这就是我所做的,但对于大量场景来说,速度非常慢:
publicstaticvoidmain(字符串[]args){
List unionSet=new ArrayList();
列表集=。。。
双重效用=0;
对于(int i=1;i,您可以使用以下方法:
如果有集合列表,则可以将其元素(即集合)展平为一组唯一值:
列表集合列表=
(第(1,2,3)组,第(2,3,7)组)列表;
Set=setList.stream()
.flatMap(集合::流)
.collect(收集器.toSet());
System.out.println(set);//[1,2,3,7]
如果嵌套层次更深,则必须执行更深的展平:
List lists=List.of(
列表(集合(1,2,3),集合(2,3,4)),
(第(3,4,5)组,第(5,1,2)组)列表;
集合=列表
//溪流
.stream()
//溪流
.flatMap(列表::流)
//溪流
.flatMap(集合::流)
.collect(收集器.toSet());
System.out.println(set);//[1,2,3,4,5]
如果有多个嵌套级别未知的集合,则可以创建通用递归展平方法:
publicstaticvoidmain(字符串[]args){
列表集合列表=
(第(1,2,3)组,第(2,3,7)组)列表;
List lists=List.of(
列表(集合(1,2,3),集合(2,3,4)),
(第(3,4,5)组,第(5,1,2)组)列表;
Set Set=(Set)toSet(setList,list);
System.out.println(set);//[1,2,3,4,5,7]
}
公共静态设置为集合(集合…集合){
返回数组.stream(集合)
.flatMap(col->flattstream(col.stream()))
.collect(收集器.toSet());
}
公共静态流(流){
返回流。平面图(e->{
if(收集的e实例){
返回流(((集合)e).stream());
}否则{
(e)的回流;
}
});
}
另见:
•
•如果您使用番石榴或Commons系列,您可以使用union
方法
见:
或
使用上述内置java库
Set s1 = Set.of(1,2,3);
Set s2 = Set.of(3,4,5);
Set union = Stream.concat(s1.stream(),s2.stream()).collect(Collectors.toSet());
s1.addAll(s2;