我有一个List
对象(Pin
)的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}