私はすでに次のものを持っています:
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
マッピングできます。おそらく、カウントは同じかもしれません。10
USD
1
できるだけ簡潔に、そして を使用する能力があれば、最大数に属する をjava-8
取得する必要がありますか? InvoiceCurrency
そして、ソートされた整数カウントの上位2つが実際に同じ値であることを確認する簡潔な方法はありますか?
java-8
ループなどでプログラムできることはわかっていますが、最も保守しやすいコードの精神に頼りたいと思っています。