我正在创建一个扑克排名求解器,我必须在一组牌中计算具有相同套装或同等级别的牌.HashMap如果集合中有多个排名,我在这里创建并增加值.
private boolean isFourOfAKind() {
Map<RANK, Integer> rankDuplicates = new HashMap<>();
for(Card card : cards) {
rankDuplicates.put(card.getRank(), rankDuplicates.getOrDefault(card.getRank(), 0) + 1);
}
return rankDuplicates.containsValue(4);
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有可能使用流与java流完全相同的事情.它看起来像这样:
private boolean isFourOfAKind() {
Map<RANK, Integer> rankDuplicates = cards.stream()
.map(Card::getRank)
.collect(Collectors.toMap(/*...something goes here..*/)); // of course this is very wrong, but you can see what I'm aiming at.
return rankDuplicates.containsValue(4);
}
Run Code Online (Sandbox Code Playgroud) 目前我有:
cardLabels = cards.stream()
.map(ImageSupplier::getCard)
.map(JLabel::new)
.collect(toList());
cardLabels.stream().forEach(container::add);
Run Code Online (Sandbox Code Playgroud)
我可以写lambda表达式:
.map(c ->{
JLabel label = new JLabel(c);
container.add(label);
return label;
})
Run Code Online (Sandbox Code Playgroud)
但似乎很长.有什么东西我可以调用就像.doStuff(container::add)返回流JLabel吗?