目次
概要
正確に言うとListではなくSetです。
自分の確認と備忘録なのでご参考までに。
実装
ユニークなリストとしてSetで保持します。
Item
保持するオブジェクトです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public class Item { private Integer price; private String name; private String itemCode; public Item(Integer price, String name, String itemCode) { this.price = price; this.name = name; this.itemCode = itemCode; } public Integer price() { return price; } public String naem() { return name; } public String itemCode() { return itemCode; } } |
ItemList
Setで保持するファーストクラスコレクションです。
containsメソッドで、キーであるItemCodeの等価を判定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
package collections; import java.util.HashSet; public class ItemList { private HashSet<Item> itemList = new HashSet<>(); public ItemList() {} /** * 一意なキーであるItemCodeで等価判定するため、 * containsメソッドを独自実装して追加処理している。 * @param item */ public void add(Item item) { if(!contains(item)) { itemList.add(item); } } /** * 等価の判断はItemCodeとする * @param other * @return */ public boolean contains(Item other) { return itemList.stream() .anyMatch(item -> item.itemCode() == other.itemCode()); } /** * デバッグ用のテキスト表示メソッド */ public void text() { itemList.stream() .forEach(item -> System.out.println( String.format("%d, %s, %s", item.price(), item.naem(), item.itemCode()) ) ); } public int size() { return itemList.size(); } } |
TestItemList
テストコードです。
ItemCodeが同じ場合は追加されず、異なる場合のみ追加されています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.MatcherAssert.*; import org.junit.jupiter.api.Test; class TestItemList { @Test void ItemCodeが一致するItemは同じオブジェクトとする() { Item item1 = new Item(100, "A", "100-001"); Item item2 = new Item(200, "B", "100-001"); ItemList itemList = new ItemList(); itemList.add(item1); itemList.add(item2); assertThat(itemList.size(), is(1)); } @Test void ItemCodeが一致しないItemは同じオブジェクトとする() { Item item1 = new Item(100, "A", "100-001"); Item item2 = new Item(100, "A", "100-001"); Item item3 = new Item(100, "A", "100-002"); ItemList itemList = new ItemList(); itemList.add(item1); itemList.add(item2); itemList.add(item3); itemList.text(); assertThat(itemList.size(), is(2)); } } |
まとめ
- キーとなるフィールドで等価判定する。
コメント