如何从Arraylist中获取独特的物品,保留自然秩序

时间:2017-10-27 19:01:34

标签: java arraylist

例如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被删除,因为它们不止一次出现。

2 个答案:

答案 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);

Ideone demo

答案 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());