回答編集履歴

3

追記

2018/08/15 10:44

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,143 @@
1
+ 追記: 2018/08/15
2
+
3
+ ---
4
+
5
+ 怒涛の低評価が入ったので、古い話題ではありますがせっかくなので追記しておきます。
6
+
7
+
8
+
9
+ 個人的には、CardHandクラスにrankTableなどのフィールドを用意すると楽なように思います。
10
+
11
+ rankTableは『カードのランク』対『枚数』の連想配列です。
12
+
13
+
14
+
15
+ rankTableを適宜確認し、値が2以上のときに整理すれば良いです。
16
+
17
+ ```Java
18
+
19
+ class CardHand {
20
+
21
+ private Map<Integer, Integer> rankTable = new HashMap<>();
22
+
23
+ {
24
+
25
+ IntStream.rangeClosed(1, 13)
26
+
27
+ .forEach(e -> rankTable.put(e, 0))
28
+
29
+ ;
30
+
31
+ }
32
+
33
+ public void addCard(Card card) {
34
+
35
+ 手札に追加する通常の処理;
36
+
37
+
38
+
39
+ rankTable.compute(
40
+
41
+ card.getRank(), (key, old) -> old + 1
42
+
43
+ );
44
+
45
+ }
46
+
47
+ public void removeCard(Card card) {
48
+
49
+ 手札から排除する通常の処理;
50
+
51
+
52
+
53
+ rankTable.compute(
54
+
55
+ card.getRank(), (key, old) -> old - 1
56
+
57
+ );
58
+
59
+ }
60
+
61
+ private void removeCardByRank(int rank) {
62
+
63
+ Card card = 当該ランクのカードを一枚選択;
64
+
65
+ removeCard(card);
66
+
67
+ }
68
+
69
+
70
+
71
+ private boolean hasDuplicateCards() {
72
+
73
+ return rankTable.entrySet().stream()
74
+
75
+ .map(Map.Entry::getValue)
76
+
77
+ .anyMatch(v -> 2 <= v)
78
+
79
+ ;
80
+
81
+ }
82
+
83
+ private void dispose() {
84
+
85
+ while(hasDuplicateCards()) {
86
+
87
+ rankTable.entrySet().stream()
88
+
89
+ .filter(entry -> entry.getValue() >= 2)
90
+
91
+ .forEach(entry -> {
92
+
93
+ int rank = entry.getKey();
94
+
95
+
96
+
97
+ for(int i = 0; i < 2; ++i) {
98
+
99
+ removeCardByRank(rank);
100
+
101
+ }
102
+
103
+ })
104
+
105
+ ;
106
+
107
+ }
108
+
109
+ }
110
+
111
+
112
+
113
+ その他、必要なメソッド
114
+
115
+ }
116
+
117
+ ```
118
+
119
+
120
+
121
+ 疑似コードなのでこのままでは動きませんが。悪しからず。
122
+
123
+
124
+
125
+ ---
126
+
127
+ ところで、**半年以上前の回答**に急にマイナスが付くのは異常に思えます。
128
+
129
+ 確かに正確な回答ではありませんでしたが、**今日一日で6つもマイナス**が付いています。
130
+
131
+
132
+
133
+ この件は運営に連絡し、何か異常な動向が無いか調査していただくことにします。
134
+
135
+
136
+
137
+ 2018/1/30 までの回答
138
+
139
+ ---
140
+
1
141
  なんでマイナス?と思ってしばらく考えていましたが、
2
142
 
3
143
  よく考えたら要求は重複する要素の排除じゃないですね。失礼しました。

2

追記

2018/08/15 10:44

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,13 @@
1
+ なんでマイナス?と思ってしばらく考えていましたが、
2
+
3
+ よく考えたら要求は重複する要素の排除じゃないですね。失礼しました。
4
+
5
+
6
+
7
+ 残骸
8
+
9
+ ---
10
+
1
11
  重複の除去のためによく使われるのが、一度集合に置き換える方法です。
2
12
 
3
13
  リスト ⇒ 集合 ⇒ リスト のように変換すれば重複する要素を取り除けます。

1

てにをは

2018/01/30 12:41

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,4 +1,4 @@
1
- 重複除去のためによく使われるのが、一度集合に置き換える方法です。
1
+ 重複除去のためによく使われるのが、一度集合に置き換える方法です。
2
2
 
3
3
  リスト ⇒ 集合 ⇒ リスト のように変換すれば重複する要素を取り除けます。
4
4