从ArrayList <string []> - java中删除重复项

时间:2016-11-18 20:41:25

标签: java arraylist duplicates

我想删除ArrayList中的副本。

如果我这样做,它的工作:

    List<String> test = new ArrayList<>();
    test.add("a");
    test.add("a"); //Removing
    test.add("b");
    test.add("c");
    test.add("c"); //Removing
    test.add("d");

    test = test.stream().distinct().collect(Collectors.toList());

但是如果我想删除重复的String []而不是String,则不删除重复项:

    List<String[]> test = new ArrayList<>();

    test.add(new String[]{"a", "a"});
    test.add(new String[]{"a", "a"}); // Not removing
    test.add(new String[]{"b", "a"});
    test.add(new String[]{"b", "a"}); // Not removing
    test.add(new String[]{"c", "a"});
    test.add(new String[]{"c", "a"}); // Not removing

    test = test.stream().distinct().collect(Collectors.toList());
    ArrayList<String[]> test2 = (ArrayList<String[]>) test;

有哪些解决方法可以解决此问题或其他方法来删除ArrayList<String[]>的重复内容?感谢

1 个答案:

答案 0 :(得分:4)

正如@Eran所说,你不能直接使用数组,因为它们不会覆盖Object.equals()。因此,如果数组ab是相同的实例(a == b),则数组ListObject.equals只相等。

可以直接将数组转换为List<String[]> distinct = test.stream() .map(Arrays::asList) // Convert them to lists .distinct() .map((e) -> e.toArray(new String[0])) // Convert them back to arrays. .collect(Collectors.toList()); s,其中执行覆盖function listToArray(listValue){ var arrayResult = []; while(listValue.list){ arrayResult.push(listValue.value); listValue = listValue.list; } arrayResult.push(listValue.value); return arrayResult; }

Theme.Material.Light.NoActionBar

Ideone demo