gpt4 book ai didi

java - 您可以使用仿函数/函数式编程对 Java 7 中的列表进行分组(并计算每个组的元素数量)吗?

转载 作者:行者123 更新时间:2023-11-30 06:57:37 25 4
gpt4 key购买 nike

可以加群吗List<TypeEnum> types = new ArrayList(Arrays.asList(TypeEnum.A, TypeEnum.B, TypeEnum.A));进入Map<TypeEnum, Integer> countPerType; ,使用仿函数(例如 Google's GuavaApache's Commons Functor )pre Java 8?

我正在尝试了解函数式编程,但不确定这种事情是否真的可能(因为我不只是映射集合值,而是尝试聚合)?

在命令式风格中,我会做这样的事情:

public Map<TypeEnum, Integer> countByGroup(List<TypeEnum> types) {
Map<TypeEnum, Integer> countedTypes = new HashMap<>();
for(TypeEnum type : types) {
if(countedTypes.containsKey(type)) {
countedTypes.put(type, countedTypes.get(type) + 1);
} else {
countedTypes.put(type, 1);
}
}
return countedTypes;
}

<小时/> 编辑:依赖副作用似乎有点不合适 - 或者就是这样做的......?

Procedure<TypeEnum> count = new Procedure<TypeEnum>() {
public Map<TypeEnum, Integer> countPerType = null;

@Override
public void run(TypeEnum type) {
if(countPerType.containsKey(type)) {
countPerType.put(type, countPerType.get(type) + 1);
} else {
countPerType.put(type, 1);
}
}

public Procedure<TypeEnum> init(Map<TypeEnum, Integer> countPerType) {
this.countPerType = countPerType;
return this;
}
}.init(countPerType); // kudos http://stackoverflow.com/a/12206542/2018047

最佳答案

Olivier Grégoire commented正确答案:

Using Guava, you want a simple Multiset, and more specifically its EnumMultiset implementation. Multiset is a data structure made to keep track of counted elements.

鉴于您的 List<TypeEnum> types您可以创建一个 EnumMultiset使用 create :

Multiset<TypeEnum> multiset = EnumMultiset.create(types);

并且可以查询 Multiset 中某个元素的个数使用 count :

multiset.count(TypeEnum.A); // 2
multiset.count(TypeEnum.B); // 1

关于java - 您可以使用仿函数/函数式编程对 Java 7 中的列表进行分组(并计算每个组的元素数量)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41514257/

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