gpt4 book ai didi

java - 从 ArrayList 中删除重复项 - java

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:43 25 4
gpt4 key购买 nike

我想从 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[]> 重复项的方法?谢谢

最佳答案

正如@Eran 指出的那样,您不能直接使用数组,因为它们不会覆盖 Object.equals()。因此,数组 ab 只有在它们是同一实例时才相等 (a == b)。

将数组转换为 List 很简单,确实覆盖了 Object.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());

Ideone demo

关于java - 从 ArrayList<String[]> 中删除重复项 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40685597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com