我想通过在ArrayList中找到类似的项位置来过滤ArrayList,这样我就可以得到重复项的索引位置。
使用如下列表:
List = ['A', 'B', 'A', 'C', 'E', 'A']
我希望它能给我:
index [0, 2, 5] // A
index [1] // B
index [3] // C
index [4] // E
答案 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)
我们可以使用 Stream
和 Collectors.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
答案 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]}