Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我如何处理集合的并集?_Java_List_Set_Combinations_Set Union - Fatal编程技术网

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;