Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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 ArrayList的ArrayList中的唯一集_Java_Arraylist_Set - Fatal编程技术网

Java ArrayList的ArrayList中的唯一集

Java ArrayList的ArrayList中的唯一集,java,arraylist,set,Java,Arraylist,Set,嗨,我有一个arraylist的arraylist,格式如下: [[val1, val2],[val3,val4],[val1,val2],[val1,val5]] 并希望获得唯一的ArrayList集: [[val1, val2],[val3,val4],[val1,val5]] 我尝试了以下方法: Set<String> uniques = new HashSet<>(); for (ArrayList<String> sublist : ma

嗨,我有一个arraylist的arraylist,格式如下:

[[val1, val2],[val3,val4],[val1,val2],[val1,val5]]
并希望获得唯一的ArrayList集:

[[val1, val2],[val3,val4],[val1,val5]]
我尝试了以下方法:

Set<String> uniques = new HashSet<>();
    for (ArrayList<String> sublist : mappedEntities) {
        uniques.addAll(sublist);
    }
Set uniques=new HashSet();
for(ArrayList子列表:MapPedenties){
uniques.addAll(子列表);
}
但是这会将内部arraylist的所有值合并在一起

可以使用Java 8,
返回
Set
数据类型:

Set<List<String>> uniques = mappedEntities.stream().distinct().collect(Collectors.toSet());
请尝试以下代码:

public class B {
    public static void main(String[] args) throws Exception {
       List<List<String>> list= Arrays.asList(
               Arrays.asList("a","b","c"),
               Arrays.asList("a","b","c"),
               Arrays.asList("a","b","c","d"));

       Set<List<String>> uniques = new HashSet<>();
       for (List<String> sublist : list) {
          if(!uniques.contains(sublist))
          uniques.add(sublist);
       }
       System.out.println(uniques);
    }
}

这里的问题是,您需要一个数组列表的
集合
集合,但您使用的是字符串的
集合

鉴于清单:

List<List<String>> mappedEntities = Arrays.asList(Arrays.asList("val1", "val2"), 
                                                  Arrays.asList("val3", "val4"),
                                                  Arrays.asList("val1", "val2"), 
                                                  Arrays.asList("val1", "val5"));
由于集合只能保存唯一的值,因此不会将所有重复项添加到集合中(无需显式检查)。您现在可以将其打印出来:

mySet.forEach(System.out::println);

或者更简单地说,使用列表
mappedenties
初始化哈希集:

Set<List<String>> mySet = new HashSet<>(mappedEntities);
Set mySet=newhashset(mappedenties);

为什么不像这样简单地把它们放在
集合中呢

Set uniques=新HashSet(mappedenties)


您的错误是,您正在压平内部列表,并将它们的项目分别放在集合中

我是STACKOVERFLOW的初学者,但我想尝试解决您的问题
我想你想要这样..

import java.util.*; 
public class GFG { 
    public static void main(String[] args) 
    { 
        int n = 3; 

        // Here aList is an ArrayList of ArrayLists 
        ArrayList<ArrayList<String> > aList = 
                new ArrayList<ArrayList<String> >(n); 

        // Create n lists one by one and append to the 
        // master list (ArrayList of ArrayList) 
        ArrayList<String> a1 = new ArrayList<String>(); 
        a1.add("1"); 
        a1.add("2"); 
        aList.add(a1); 

        ArrayList<String> a2 = new ArrayList<String>(); 
        a2.add("11"); 
        a2.add("22"); 
        aList.add(a2); 

        ArrayList<String> a3 = new ArrayList<String>(); 
        a3.add("1"); 
        a3.add("2"); 
        aList.add(a3); 


        Set<ArrayList<String>> uniques = new HashSet<ArrayList<String>>();
        for (ArrayList<String> sublist : aList) {
            uniques.add(sublist);
        }
        System.out.println("Your Answer"); 
        for (ArrayList<String> x : uniques) 
            System.out.println(x); 
    }


    } 
import java.util.*;
公共类GFG{
公共静态void main(字符串[]args)
{ 
int n=3;
//这里是ArrayList的ArrayList
ArrayList=
新ArrayList(n);
//逐个创建n个列表并附加到
//主列表(ArrayList中的ArrayList)
ArrayList a1=新的ArrayList();
a1.添加(“1”);
a1.添加(“2”);
3.添加(a1);
ArrayList a2=新的ArrayList();
a2.添加(“11”);
a2.添加(“22”);
(a)添加(a2);
ArrayList a3=新的ArrayList();
a3.添加(“1”);
a3.添加(“2”);
3.添加(a3);
Set uniques=new HashSet();
for(ArrayList子列表:aList){
添加(子列表);
}
System.out.println(“您的答案”);
对于(ArrayList x:uniques)
系统输出println(x);
}
} 

共享您的全部代码。另外,我认为您需要
Set
而不是@NicholasK所说的
Set
uniques
的类型应该是
Set
addAll
函数获取一个集合,并将集合中的每个成员分别添加到集合中--您只需要将整个集合作为单个项添加。
HashSet
不是只包含像
Hashmap
这样的唯一值吗?是@SamzSakerz--没错。哦,我忘记了
ArrayList
是唯一的对象。虽然这会过滤重复项,但这是一种昂贵的方法,因为
distinct()
会创建一个
HashSet
,然后我们会创建一个
列表。此外,我们应该生成一个数据结构,如果我们向其中添加更多的项,它将保持唯一性——我们应该创建一个集合,而不是列表。最后,我认为使用完全不同概念的答案对OP的帮助不如解释他们当前代码中的错误概念的答案。因为它是一个集合,所以您不需要显式地检查重复项。如果(!uniques.contains(sublist))
输出:您的答案[11,22][1,2],则不需要此行
mySet.forEach(System.out::println);
Set<List<String>> mySet = new HashSet<>(mappedEntities);
import java.util.*; 
public class GFG { 
    public static void main(String[] args) 
    { 
        int n = 3; 

        // Here aList is an ArrayList of ArrayLists 
        ArrayList<ArrayList<String> > aList = 
                new ArrayList<ArrayList<String> >(n); 

        // Create n lists one by one and append to the 
        // master list (ArrayList of ArrayList) 
        ArrayList<String> a1 = new ArrayList<String>(); 
        a1.add("1"); 
        a1.add("2"); 
        aList.add(a1); 

        ArrayList<String> a2 = new ArrayList<String>(); 
        a2.add("11"); 
        a2.add("22"); 
        aList.add(a2); 

        ArrayList<String> a3 = new ArrayList<String>(); 
        a3.add("1"); 
        a3.add("2"); 
        aList.add(a3); 


        Set<ArrayList<String>> uniques = new HashSet<ArrayList<String>>();
        for (ArrayList<String> sublist : aList) {
            uniques.add(sublist);
        }
        System.out.println("Your Answer"); 
        for (ArrayList<String> x : uniques) 
            System.out.println(x); 
    }


    }