Java Arraylist中重复项的索引

时间:2016-12-12 06:13:43

标签: java arraylist

我想通过在ArrayList中找到类似的项位置来过滤ArrayList,这样我就可以得到重复项的索引位置。

使用如下列表:

List = ['A', 'B', 'A', 'C', 'E', 'A']

我希望它能给我:

index [0, 2, 5] // A
index [1] // B
index [3] // C
index [4] // E

3 个答案:

答案 0 :(得分:2)

Map<Character, List<Integer>> indexes = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
    indexes.computeIfAbsent(list.get(i), c -> new ArrayList<>()).add(i);
}
System.out.println(indexes);
// {A=[0, 2, 5], B=[1], C=[3], E=[4]}

答案 1 :(得分:1)

Java 8+

我们可以使用 StreamCollectors.groupingBy 来获取 List 中特定元素的所有索引。

import java.util.stream.Collectors;
import java.util.stream.IntStream;
//...
final Map<Character, List<Integer>> indexMap = IntStream.range(0, list.size()).boxed()
        .collect(Collectors.groupingBy(list::get));
//{A=[0, 2, 5], B=[1], C=[3], E=[4]}
//Map of item value to List of indexes at which it occurs in the original List

Demo

答案 2 :(得分:0)

char[] list = {'A', 'B', 'A', 'C', 'E', 'A'};
    Map<Character, List<Integer>> indexes = new HashMap<>();
    for (int i = 0; i < list.length; i++) {
         if(indexes.get(list[i]) != null)
         { 
             List<Integer> indexList=indexes.get(list[i]);
             indexList.add(i);
             indexes.put(list[i],indexList);
         }
         else
         {
            List<Integer> indexList =  new ArrayList<>();
            indexList.add(i);
             indexes.put(list[i],indexList);
        }
    }
    System.out.println(indexes);
    // {E=[4], A=[0, 2, 5], B=[1], C=[3]}