gpt4 book ai didi

java - 如何从 Java 中的列表集中删除重复项

转载 作者:行者123 更新时间:2023-12-04 14:47:29 24 4
gpt4 key购买 nike

我有一组列表要从 中删除重复项无论每个列表中元素的顺序如何 ,如下:
我将此作为输入 [[-1,-1,2],[0,-1,1],[1,-1,0],[2,-1,-1],[-1,2,-1],[-1,1,0],[0,1,-1],[-1,0,1],[1,0,-1]]当我使用 Set<Set>为了完善我的元素,它完成了部分工作,但我得到了 [[1,-1,0],[-1,2]]这是合乎逻辑的,因为内部 Set 细化了 [-1,-1,2] 的重复项.
当我尝试使用 Set<List> 时我无法改进我的元素,这让我得到了这个 [[-1,-1,2],[0,-1,1],[1,-1,0],[2,-1,-1],[-1,2,-1],[-1,1,0],[0,1,-1],[-1,0,1],[1,0,-1]]那么我如何才能设法优化重复项并保持生成的三元组完整无缺呢?
先感谢您。

最佳答案

我认为您可以使用排序来使使用 Set 和 List 按照您指定的方式工作:

import java.util.Arrays;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

class Main {

public static void main(String[] args) {
int[][] arrayWithDuplicates = new int[][] { { -1, -1, 2 }, { 0, -1, 1 }, { 1, -1, 0 }, { 2, -1, -1 },
{ -1, 2, -1 }, { -1, 1, 0 }, { 0, 1, -1 }, { -1, 0, 1 }, { 1, 0, -1 } };
System.out.printf("arrayWithDuplicates = %s%n", Arrays.deepToString(arrayWithDuplicates));
int[][] arrayWithoutDuplicates = getArrayWithoutDuplicates(arrayWithDuplicates);
System.out.printf("arrayWithoutDuplicates = %s%n", Arrays.deepToString(arrayWithoutDuplicates));
}

public static int[][] getArrayWithoutDuplicates(int[][] array) {
List<int[]> listWithoutDuplicates = new ArrayList<>();
Set<List<Integer>> seenSubLists = new HashSet<>();
for (int[] ints : array) {
List<Integer> sortedInts = Arrays.stream(ints).boxed().sorted().collect(Collectors.toList());
if (!seenSubLists.contains(sortedInts)) {
listWithoutDuplicates.add(ints);
seenSubLists.add(sortedInts);
}
}
return listWithoutDuplicates.toArray(new int[listWithoutDuplicates.size()][]);
}

}
输出:
arrayWithDuplicates = [[-1, -1, 2], [0, -1, 1], [1, -1, 0], [2, -1, -1], [-1, 2, -1], [-1, 1, 0], [0, 1, -1], [-1, 0, 1], [1, 0, -1]]
arrayWithoutDuplicates = [[-1, -1, 2], [0, -1, 1]]

关于java - 如何从 Java 中的列表集中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69753309/

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