我正在尝试计算从 Item 对象列表中复制了多少项。如果项目具有相同的 id,则项目是重复的。
例如
[5, 5, 2, 4, 2]
Run Code Online (Sandbox Code Playgroud)
id 5 和 2 都出现不止一次,所以答案是 2。
public class Item {
int id;
public Item(int id) {
this.id = id;
}
public int getId() {
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
public class DuplicateItems {
public static int count(List<Item> items) {
int count = 0;
if (items.size() == 0) {
return 0;
}
items.sort(Comparator.comparingInt(Item::getId));
Map<Object, Long> resultMap = new HashMap<>();
items.forEach(e -> resultMap.put(e, resultMap.getOrDefault(e, 0L) + 1L));
System.out.println(resultMap.size());
return count;
}
private static List<Items> convertToList(int[] values) {
List<Item> items = new ArrayList<>();
for (int num : values) {
items.add(new Item(num));
}
return items;
}
public static void main(String[] args) {
int[] itemsArray = {5, 5, 2, 4, 2};
List<Item> items = convertToList(itemsArray);
int duplicateCount = count(items);
System.out.println("Duplicate Count: " + duplicateCount);
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,它说:
Duplicate Count: 5
为什么值不是 2?
这会将它们放在基于频率的映射中,然后计算大于 1 的值的数量。
long dups = list2.stream()
.collect(Collectors.groupingBy(Item::getId, Collectors.counting()))
.values().stream().filter(i-> i > 1).count();
System.out.println(dups);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1737 次 |
| 最近记录: |