JavaであるListオブジェクトから別のListオブジェクトに含まれる要素のみ取り出したい(重複しない要素を削除したい)場合のコーディング例をご紹介します。
こういう場合、Java初心者がよくやってしまいがちなのがループでまわしてcontainsで判定しながらremoveするロジックを自ら書いてしまう事ですがListクラスの「retainAll」を使用する事で簡単に実現出来ちゃいます。
Javaソース
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/** * <p>[概 要] 重複しない要素をリストから削除</p> * <p>[詳 細] リストに含まれない要素をリストから削除するメソッドです</p> * <p>[備 考] </p> * * @param originList 重複しない要素も含むリスト * @param mstList 残したい要素のみ存在するマスタリスト * @return originListからdelListの要素を削除したリスト */ public static List<String> retainList(List<String> originList, List<String> mstList) { originList.retainAll(mstList); return originList; } |
JUnitサンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
@Test public void retainListTest() { // 準備 List<String> mstList = new ArrayList<String>(); mstList.add("a"); mstList.add("b"); mstList.add("c"); List<String> originList = new ArrayList<String>(); originList.add("a"); originList.add("b"); originList.add("c"); originList.add("d"); originList.add("e"); // 実行 List<String> result = UtilClass1.retainList(originList, mstList); // 検証 assertEquals("リストの件数が一致していません。", 3, result.size()); assertEquals("1件目の値が一致していません。", "a", result.get(0)); assertEquals("2件目の値が一致していません。", "b", result.get(1)); assertEquals("3件目の値が一致していません。", "c", result.get(2)); } |