一个实例掌握java的stream(扑克发牌,洗牌,牌型判断)

时间:2024-03-13 13:41:08
import java.util.*; import java.util.stream.Collectors; public class Poker { private String[] colors = {"红桃","黑桃","方片","草花"}; private Card[] cards = new Card[24]; public Poker() { int count = 0; for(int i = 0; i < colors.length; i++){ for(int j = 9; j < 15; j++){ Card card = new Card(colors[i], j); cards[count++] = card; } } } public List<Card> getOneHand(){ List<Card> lst = new ArrayList<>(); for(int i = 0; i < 5; i++){ lst.add(cards[i]); } return lst; } public String checkCardType(List<Card> oneHandList){ String color = oneHandList.get(0).getColor(); long count = oneHandList.stream().filter(card -> card.getColor().equals(color)).count(); List<Integer> valueLst = oneHandList.stream().map(card->card.getValue()).collect(Collectors.toList()); Collections.sort(valueLst); Map<Integer, List<Card>> map = oneHandList.stream() .collect(Collectors.groupingBy(Card::getValue)); long quadCount = map.entrySet().stream().filter(x -> x.getValue().size()==4).count(); long threeCount = map.entrySet().stream().filter(x -> x.getValue().size()==3).count(); long twoCount = map.entrySet().stream().filter(x -> x.getValue().size()==2).count(); long oneCount = map.entrySet().stream().filter(x -> x.getValue().size()==1).count(); String result = ""; boolean bIsSameColor = false; boolean bIsStraight = false; if(count == 5){ result = "同花"; bIsSameColor = true; } if((valueLst.get(4) - valueLst.get(0) == 4)&&oneCount==5){ result = "顺子"; bIsStraight = true; } if(bIsStraight&&bIsSameColor){ result = "同花顺"; } if(quadCount == 1){ result = "4带1"; } if(twoCount == 1){ result = "pair"; } if(threeCount == 1){ if(twoCount == 1){ result = "3带2"; } else if(twoCount == 0){ result = "311"; } } if(twoCount == 2){ result = "221"; } if(oneCount==5&&!bIsStraight&&!bIsSameColor){ result = "杂牌"; } return result; } public void print(){ int count = 0; for(int i = 0; i < colors.length; i++){ for(int j = 0; j < 6; j++){ System.out.print(cards[count++]+" "); } System.out.println(); } } public void shuffle(){ Random random = new Random(); for(int i = 0; i < cards.length; i++){ int random_idx = random.nextInt(24); Card tmp = cards[i]; cards[i] = cards[random_idx]; cards[random_idx] = tmp; } } public static void main(String[] args) { Poker poker = new Poker(); poker.print(); System.out.println(); poker.shuffle();//打乱 poker.print(); System.out.println("======"); List<Card> hand = poker.getOneHand(); System.out.println(hand); System.out.println(poker.checkCardType(hand)); } }