一个实例掌握java的stream(扑克发牌,洗牌,牌型判断)
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));
}
}