Java-->可变参数+集合操作的工具类

 

 

 

  • 可变参数:
 1 public class MethodDemo {
 2     public static void main(String[] args) {
 3         sum();//不传参数
 4         sum(5); //一个参数
 5         sum(1,2,3); //多个参数
 6         sum(new int[]{5,6,4,7,8});
 7     }
 8     public static void sum(int...sum){
 9         // 可变参数在方法内部其实就是一个数组
10         System.out.println("元素个数:" + sum.length);
11         System.out.println("元素内容:" + Arrays.toString(sum));
12     }
13 }

示例运行结果:

 1 import java.util.*;
 2 
 3 public class CollectionsDemo1 {
 4     public static void main(String[] args) {
 5         List<String> names = new ArrayList<>();
 6 //        names.add("小明");
 7 //        names.add("小白");
 8 //        names.add("小清");
 9 //        names.add("小楚");
10         //System.out.println("------------------");
11         //使用集合工具类可以一行添加元素
12         Collections.addAll(names,"小明","小白","小清","小楚");
13         System.out.println(names);
14 
15         //打乱(List)集合顺序
16         Collections.shuffle(names);
17         System.out.println(names);
18 
19         //将(List)集合按照指定规则进行排序
20         List<Integer> list = new ArrayList<>(); 21 //        list.add(18);
22 //        list.add(19);
23 //        list.add(21);
24 //        list.add(5);
25         Collections.addAll(list,10,1,12,13);
26         Collections.sort(list);
27         System.out.println(list);
28     }
29 }

示例运行结果:

 

 自定义比较规则:

方式一:类自定义比较规则

 

 示例运行结果:

 

 

 

 可以看到,因为List集合是可重复的,所以保留了集合中数值相同的对象内容。

方式二:sort()方法自带的比较器对象

 

 示例运行结果:

 

 

 

 我们会发现,sort()方法自带的比较器对象进行比较,使用Lambda表达式简化后仅需一行代码即可完成比较操作,并且它会优先于类自定义比较规则进行执行,因此在实际的开发中会更加常用一点。

  •  案例:斗地主游戏
  • 需求:在启动游戏房间的时候,应该题前准备好54张牌,完成洗牌、发牌、牌排序逻辑。

分析:

  1. 当系统启动的同时需要准备好数据的时候,就可以使用静态代码块了;
  2. 洗牌就是打乱牌的顺序;
  3. 定义三个玩家,依次发出54张牌;
  4. 给玩家的牌进行排序;
  5. 输出每个玩家的牌数据。

牌类:

 1 package com.companyName.d4_collection_test;
 2 
 3 public class Card {
 4     private String size;
 5     private String color;
 6     private int index; //牌真正的大小
 7 
 8     public Card() {
 9     }
10 
11     public Card(String size, String color, int index) {
12         this.size = size;
13         this.color = color;
14         this.index = index;
15     }
16 
17     public int getIndex() {
18         return index;
19     }
20 
21     public void setIndex(int index) {
22         this.index = index;
23     }
24 
25     public String getSize() {
26         return size;
27     }
28 
29     public void setSize(String size) {
30         this.size = size;
31     }
32 
33     public String getColor() {
34         return color;
35     }
36 
37     public void setColor(String color) {
38         this.color = color;
39     }
40 
41     @Override
42     public String toString() {
43         return size + color;
44     }
45 }

测试类:

 1 import java.util.ArrayList;
 2 import java.util.Collections;
 3 import java.util.Comparator;
 4 import java.util.List;
 5 
 6 public class GemeDemo {
 7     //1、做牌,定义一个静态代码块,用集合存储54张牌
 8     public static List<Card> allCards = new ArrayList<>();
 9     static {
10         String[] sizes = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
11         String[] colors = {"", "", "", ""};
12         int index = 0;
13         for (String size : sizes) {
14             index ++;
15             for (String color : colors) {
16                 Card card = new Card(size,color,index);
17                 allCards.add(card);
18             }
19         }
20         //添加大小王
21         Card king = new Card("","大🃏",++index);
22         Card surname = new Card("","小🃏",++index);
23         Collections.addAll(allCards,king,surname);
24         System.out.println(allCards);
25     }
26     public static void main(String[] args) {
27         //打乱牌的顺序
28         Collections.shuffle(allCards);
29         System.out.println(allCards);
30         //三个玩家
31         List<Card> playerA = new ArrayList<>();
32         List<Card> playerB = new ArrayList<>();
33         List<Card> playerC = new ArrayList<>();
34         for (int i = 0; i < allCards.size() - 3; i++) {
35             switch (i % 3){
36                 case 0:
37                     playerA.add(allCards.get(i));
38                     break;
39                 case 1:
40                     playerB.add(allCards.get(i));
41                     break;
42                 case 2:
43                     playerC.add(allCards.get(i));
44                     break;
45             }
46         }
47         //底牌
48         List<Card> lastThreeCards = allCards.subList(allCards.size() - 3, allCards.size());
49         //排序
50         sortCards(playerA);
51         sortCards(playerB);
52         sortCards(playerC);
53         //打印出来看看
54         System.out.println("A: " + playerA);
55         System.out.println("B:" + playerB);
56         System.out.println("C:" + playerC);
57         System.out.println(lastThreeCards);
58     }
59     //排序方法
60     public static void sortCards(List cards){
61         Collections.sort(cards, new Comparator<Card>() {
62             @Override
63             public int compare(Card o1, Card o2) {
64                 return o2.getIndex() - o1.getIndex();
65             }
66         });
67     }
68 }

示例运行结果:

posted @ 2022-06-02 21:42  羽梦齐飞  阅读(99)  评论(0编辑  收藏  举报