用java代码 :list根据某个字段去重并统计数量
时间: 2023-07-19 12:17:34 浏览: 89
可以使用 Java 中的 Map 和 Counter 来实现。假设有以下数据:
```java
List<Map<String, Object>> data = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("name", "Alice");
map1.put("age", 23);
map1.put("city", "New York");
data.add(map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "Bob");
map2.put("age", 25);
map2.put("city", "New York");
data.add(map2);
Map<String, Object> map3 = new HashMap<>();
map3.put("name", "Charlie");
map3.put("age", 23);
map3.put("city", "San Francisco");
data.add(map3);
Map<String, Object> map4 = new HashMap<>();
map4.put("name", "David");
map4.put("age", 28);
map4.put("city", "San Francisco");
data.add(map4);
Map<String, Object> map5 = new HashMap<>();
map5.put("name", "Alice");
map5.put("age", 23);
map5.put("city", "New York");
data.add(map5);
Map<String, Object> map6 = new HashMap<>();
map6.put("name", "Bob");
map6.put("age", 25);
map6.put("city", "New York");
data.add(map6);
```
要根据 `city` 字段去重并统计数量,可以使用以下代码:
```java
Map<String, Integer> result = new HashMap<>();
for (Map<String, Object> d : data) {
String city = (String) d.get("city");
if (!result.containsKey(city)) {
result.put(city, 1);
} else {
result.put(city, result.get(city) + 1);
}
}
for (Map.Entry<String, Integer> entry : result.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
```
输出结果为:
```
New York: 2
San Francisco: 2
```
其中,首先创建了一个空的 Map 对象 `result`,然后遍历数据列表 `data`,对于每个数据项,取出 `city` 字段,并检查其是否已经在 `result` 中出现过,如果是,则将其对应的计数器加 1,否则将其加入 `result` 中,并将计数器设置为 1。最后遍历 `result`,输出每个城市对应的计数器值。
阅读全文