例如ArrayList:
Integer[] intArray = new Integer[] { 0, 1 , 0 , 2 , 3 , 3 , 5 , 6 , -4 ,6 };
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(intArray));
需要获得非重复值,保留顺序
1 , 2 , 5 , -4
0,3和6被删除,因为它们不止一次出现。
答案 0 :(得分:1)
将元素放入LinkedHashSet
;如果你找到一个已经存在的元素,就把它放到另一个元素中;删除所有已经存在的&#34;&#34;最后的元素:
LinkedHashSet<Integer> set = new LinkedHashSet<>();
HashSet<Integer> alreadyPresent = new HashSet<>();
for (Integer i : intArray) {
if (!set.add(i)) {
alreadyPresent.add(i);
}
}
set.removeAll(alreadyPresent);
ArrayList<Integer> list = new ArrayList<>(set);
答案 1 :(得分:1)
其他解决方案:构建所有数字的直方图(即每个数字的出现次数),并仅保留出现次数为1的数字。
使用流:
List<Integer> result =
list.stream()
.collect(Collectors.toMap(Function.identity(), i -> 1, Integer::sum, LinkedHashMap::new))
.entrySet()
.stream()
.filter(e -> e.getValue() == 1)
.map(Map.Entry::getKey)
.collect(Collectors.toList());