在 LinkedHashSet 中找到唯一值的索引
find the index of unique values in LinkedHashSet
我正在使用 LinkedHashSet 从 ArrayList 中获取所有唯一值。
我的代码如下所示:
Set<String> set = new LinkedHashSet<>( filteredTitles );
filteredTitles.clear();
filteredTitles.addAll( set );
例如,如果 filteredTitles 等于 ["a","b","c","a"]
它会 return 我 ["a","b","c"]
。
如何获取唯一值的索引?例如这里 [1,2,3]
因为 4 已经不是唯一的了。
谢谢
您可以为每个唯一元素检索它在第一个列表中的第一个索引。索引也从 0
开始
List<String> titles = Arrays.asList("a", "b", "c", "a", "e");
List<String> uniqueTitles = new ArrayList<>(new LinkedHashSet<>(titles));
List<Integer> indices = uniqueTitles.stream().map(titles::indexOf).collect(Collectors.toList());
System.out.println(uniqueTitles); // [a, b, c, e]
System.out.println(indices); // [0, 1, 2, 4]
与其简单地将列表复制到 LinkedHashSet
,不如将其与索引列表一起构建:
Set<String> set = new LinkedHashSet<>();
List<Integer> firstOccurrences = new ArrayList<>();
for (int i = 0; i < filteredTitles.size(); ++i) {
if (set.add(filteredTitles.get(i))) {
firstOccurrences.add(i);
}
}
How can I get the index of the unique values?
这是使用地图的一种方法。
- 地图维护对象作为键和索引作为值。
- 集合会保留之前添加的对象的记录,以确保只添加唯一的对象。
List<String> list = List.of("a","b","e","c","a","d","f","e","f","e","g");
Set<String> seen = new HashSet<>();
Map<String,Integer> uniquePair = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
if (seen.add(str)) { // if not seen already, add to map
uniquePair.put(str, i);
continue;
}
uniquePair.remove(str); // oops, not unique, remove from map.
}
uniquePair.entrySet().forEach(System.out::println);
打印
b=1
c=3
d=5
g=10
我正在使用 LinkedHashSet 从 ArrayList 中获取所有唯一值。
我的代码如下所示:
Set<String> set = new LinkedHashSet<>( filteredTitles );
filteredTitles.clear();
filteredTitles.addAll( set );
例如,如果 filteredTitles 等于 ["a","b","c","a"]
它会 return 我 ["a","b","c"]
。
如何获取唯一值的索引?例如这里 [1,2,3]
因为 4 已经不是唯一的了。
谢谢
您可以为每个唯一元素检索它在第一个列表中的第一个索引。索引也从 0
List<String> titles = Arrays.asList("a", "b", "c", "a", "e");
List<String> uniqueTitles = new ArrayList<>(new LinkedHashSet<>(titles));
List<Integer> indices = uniqueTitles.stream().map(titles::indexOf).collect(Collectors.toList());
System.out.println(uniqueTitles); // [a, b, c, e]
System.out.println(indices); // [0, 1, 2, 4]
与其简单地将列表复制到 LinkedHashSet
,不如将其与索引列表一起构建:
Set<String> set = new LinkedHashSet<>();
List<Integer> firstOccurrences = new ArrayList<>();
for (int i = 0; i < filteredTitles.size(); ++i) {
if (set.add(filteredTitles.get(i))) {
firstOccurrences.add(i);
}
}
How can I get the index of the unique values?
这是使用地图的一种方法。
- 地图维护对象作为键和索引作为值。
- 集合会保留之前添加的对象的记录,以确保只添加唯一的对象。
List<String> list = List.of("a","b","e","c","a","d","f","e","f","e","g");
Set<String> seen = new HashSet<>();
Map<String,Integer> uniquePair = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
String str = list.get(i);
if (seen.add(str)) { // if not seen already, add to map
uniquePair.put(str, i);
continue;
}
uniquePair.remove(str); // oops, not unique, remove from map.
}
uniquePair.entrySet().forEach(System.out::println);
打印
b=1
c=3
d=5
g=10