目标:找到拥有更大牌的获胜者。
首先:定义数据结构,省略构造函数和getter/setter方法:
public class Card {
private CardRank rank;
private String suit;
}
public enum CardRank {
CARD_2(2),
CARD_4(4),
CARD_5(5);
private int val;
public int getVal() {
return val;
}
CardRank(int val) {
this.val = val;
}
}
public class Hand {
private Player player;
private Card firstCard;
private Card secondCard;
}
public class Player {
private String name;
private int money;
}
public class PlayerWithBigCard {
private String name;
private CardRank rank;
第二种:使用Java 8 stream API 找到我们想要的播放器(省略初始化代码):
Optional<PlayerWithBigCard> winner = hands.stream().map(hand -> {
PlayerWithBigCard playerWithBigCard = new PlayerWithBigCard();
playerWithBigCard.setName(hand.getPlayer().getName());
CardRank firstCardRank = hand.getFirstCard().getRank();
CardRank secondCardRank = hand.getSecondCard().getRank();
if (firstCardRank.getVal() - secondCardRank.getVal() > 0) {
playerWithBigCard.setRank(firstCardRank);
} else {
playerWithBigCard.setRank(secondCardRank);
}
return playerWithBigCard;
}).max(Comparator.comparingInt(p -> p.getRank().getVal()));
winner.ifPresent(playerWithBigCard -> System.out.println(playerWithBigCard.getName()));
ps:Java Strem 为我们提供了很多简单的数据操作方法,你可以在here找到文档