2つのテキストファイルがあり、それぞれのテキストファイルにしか存在しない番号と名前を表示させるのですが比較方法が分からず躓いています。
単純に一方をループしながら他方にあるかチェックし、なかったらリストに追加を両方でやるだけでは?
もう少しすっきりさせるなら集合演算で短くできます(Streamでもできそうだけどわかんないw
読み込んだ2つのmapを比較し結果をarraylist<HashMap<String,String>>に格納
ArrayList<Map.Entry<String, String>>
のほうが楽だと思うので(回答は)そうしましたが、HashMap
がいいなら好きに変えてください^^;
Java
1import java.util.*;
2
3public class Sample {
4 public static void main(String[] args) {
5 var test1 = new HashMap<String, String>();
6 test1.put("A1", "ai");
7 test1.put("A2", "mana");
8 test1.put("A3", "sho");
9 test1.put("A4", "oda");
10 test1.put("A5", "tanabe");
11 test1.put("A6", "sato");
12
13 var test2 = new HashMap<String, String>();
14 test2.put("A1", "akari");
15 test2.put("A2", "mana");
16 test2.put("A4", "oda");
17 test2.put("A5", "momo");
18 test2.put("A6", "sato");
19 test2.put("A7", "ai");
20
21 var result = new ArrayList<Map.Entry<String, String>>();
22
23 for (var entry : test1.entrySet()) {
24 if (Objects.equals(entry.getValue(), test2.get(entry.getKey()))) continue;
25 result.add(entry);
26 }
27 for (var entry : test2.entrySet()) {
28 if (Objects.equals(entry.getValue(), test1.get(entry.getKey()))) continue;
29 result.add(entry);
30 }
31
32 System.out.println(result); // [A1=ai, A3=sho, A5=tanabe, A1=akari, A5=momo, A7=ai]
33
34
35 // 和集合と積集合の差集合
36 // 両方合わせたものからどちらにも入っているものを抜く
37 var union = new HashSet<>(test1.entrySet());
38 union.addAll(test2.entrySet());
39
40 var intersect = new HashSet<>(test2.entrySet());
41 intersect.retainAll(test1.entrySet());
42
43 union.removeAll(intersect);
44 System.out.println(union); // [A5=momo, A1=akari, A1=ai, A3=sho, A5=tanabe, A7=ai]
45
46
47 // 差集合同士の和集合
48 // 1から2にあるものを抜く・2から1にあるものを抜く 残った者同士を合わせる
49 var except1 = new HashSet<>(test1.entrySet());
50 except1.removeAll(test2.entrySet());
51
52 var except2 = new HashSet<>(test2.entrySet());
53 except2.removeAll(test1.entrySet());
54
55 except1.addAll(except2);
56 System.out.println(except1); // [A5=momo, A1=akari, A1=ai, A3=sho, A5=tanabe, A7=ai]
57 }
58}
注)nullが入っていると、エラーにはならないが期待と合わない。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/11/08 13:00