我想删除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[]>
的重复内容?感谢
答案 0 :(得分:4)
正如@Eran所说,你不能直接使用数组,因为它们不会覆盖Object.equals()
。因此,如果数组a
和b
是相同的实例(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());
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