gpt4 book ai didi

java - 从 map 中获取最高 n 个数字的最简洁方法?

转载 作者:太空宇宙 更新时间:2023-11-04 07:03:36 25 4
gpt4 key购买 nike

我已经有以下内容:

public enum InvoiceCurrency {
EUR(
s -> (s.contains("€") || s.contains("EUR"))
),
USD(
s -> (s.contains("$") || s.contains("USD"))
);

private final Predicate<String> predicate;

InvoiceCurrency(final Predicate<String> predicate) {
this.predicate = predicate;
}

public boolean matchesString(final String value) {
return predicate.test(value);
}

public static EnumMap<InvoiceCurrency, Integer> createMapping(final Stream<String> valuesStream) {
EnumMap<InvoiceCurrency, Integer> mapping = new EnumMap<>(InvoiceCurrency.class);
mapping.replaceAll((k, v) -> 0);
Stream<InvoiceCurrency> enums = Arrays.stream(InvoiceCurrency.values());
valuesStream.forEach(
s -> enums.forEach(
e -> {
if (e.matchesString(s)) {
mapping.compute(e, (k, v) -> v++);
}
}
)
);
return mapping;
}
}
<小时/>
private InvoiceCurrency calculateCurrency() {
EnumMap<InvoiceCurrency, Integer> map = InvoiceCurrency.createMapping(data.words.stream().map(w -> w.content));
InvoiceCurrency maximum = map.entrySet().parallelStream(). //how to continue?
}

这会导致从枚举到“出现次数”的映射,因此 EUR 可以映射到 10USD 可以映射到 1。可能计数是相同的。

现在我是否可以尽可能简洁并能够使用java-8来获取属于最高编号的InvoiceCurrency?有没有一种简洁的方法可以看到排序后的整数计数的前 2 个实际上具有相同的值?

我知道我可以使用循环等对其进行编程,但我希望依靠 java-8 精神来获得最易于维护的代码。

最佳答案

带有 Map<String, Integer> 的简单示例但同样适用于你的例子。打印前 2 个条目(b 和 c 或 d)。

import static java.util.Collections.reverseOrder;
import static java.util.Comparator.comparingInt;
//...

Map<String, Integer> map = new HashMap<>();
map.put("a", 2);
map.put("b", 10);
map.put("c", 5);
map.put("d", 5);
map.put("e", 1);

map.entrySet().parallelStream()
.sorted(reverseOrder(comparingInt(Map.Entry::getValue)))
.limit(2)
.forEach(System.out::println);

//or: .forEachOrdered(System.out::println);
//to print in descending order

注意:从 b129 开始,您还可以使用 sorted(comparingInt(Map.Entry::getValue).reversed())而不是sorted(reverseOrder(comparingInt(Map.Entry::getValue))) .

关于java - 从 map 中获取最高 n 个数字的最简洁方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21751253/

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