gpt4 book ai didi

java - 从集合中对象的字段中获取 Distinct 和 count 值

转载 作者:搜寻专家 更新时间:2023-10-31 20:01:28 26 4
gpt4 key购买 nike

我有一个 ListPin对象 ( List<Pin> ) 其中 Pin类具有以下属性:

String pinNumber, String pinType, Date insertDate

我想要一个 HashMap<String pinNumber, int count>有不同的 pinNumber 告诉我 List<Pin> 中有多少不同的 pinNumber以及每一个的计数。

所以我知道的方法是:

  • 遍历 List<Pin>
  • 检查 HashMap 是否已经包含 pinNumber 的键值并且:
  • 如果不存在则增加或添加。

我想对 Pin 中的每个字段执行相同的操作对象。

我确定应该有更简单的方法来做到这一点?

也许 Guava 有更简单的东西?

最佳答案

如果你有可能使用 Java 8(因为你想做的基本上听起来像是“分组依据”操作),这可以使用新的 Stream API 以优雅的方式解决(正如用户 vallismortis 所暗示的那样) ):

import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;

import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class Main {

public static void main(String[] args) {
List<Pin> pins = Arrays.asList(
new Pin("PIN-1", "T1", new Date()),
new Pin("PIN-1", "T2", new Date()),
new Pin("PIN-1", "T3", new Date()),
new Pin("PIN-2", "T2", new Date()),
new Pin("PIN-2", "T2", new Date()),
new Pin("PIN-3", "T2", new Date())

);
Map<String, Long> map = pins.stream().collect(groupingBy(Pin::getPinNumber, counting()));
System.out.println("map = " + map);
}
}

class Pin {
String pinNumber;
String pinType;
Date insertDate;

public Pin(String pinNumber, String pinType, Date insertDate) {
this.pinNumber = pinNumber;
this.pinType = pinType;
this.insertDate = insertDate;
}

public String getPinNumber() {
return pinNumber;
}

public String getPinType() {
return pinType;
}

public Date getInsertDate() {
return insertDate;
}
}

输出:

map = {PIN-1=3, PIN-3=1, PIN-2=2}

关于java - 从集合中对象的字段中获取 Distinct 和 count 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30980586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com