Map
fromString
をオブジェクト タイプに使用できます( Obj
SSCCE を作成するために使用しました)。
listobjects
とlist が与えられたとしますstrings
。
手順:
- 変数をキーとしてすべて
objects
を amap
に入れるstr
- を使用してこれらすべての
str
変数を取得しますmap.keySet()
objects
入っているが入っていないすべての文字列を取得strings
するkeys.removeAll(strings)
strings
入っているが入っていないすべての文字列を取得objects
するstrings.removeAll(keys)
objects
残りに対応する を取得しますkeys
コレクションの 1 つをバックアップする必要があるため、手順 3 と 4 では注意が必要です。
import java.util.*;
public class Test {
public static void main(String[] args) throws Exception {
new Test();
}
public Test() {
List<Obj> objects = new ArrayList<>();
objects.add(new Obj("a"));
objects.add(new Obj("b"));
objects.add(new Obj("c"));
List<String> strings = new ArrayList<>();
strings.add("a");
strings.add("d");
strings.add("e");
remove(objects, strings);
System.out.println(objects);
System.out.println(strings);
}
public void remove(List<Obj> objects, List<String> strings) {
Map<String, Obj> map = new HashMap<>();
for (Obj object : objects) {
map.put(object.str, object);
}
Set<String> keys = map.keySet();
List<String> oldStrings = new ArrayList<>(strings);
strings.removeAll(keys);
keys.removeAll(oldStrings);
objects.clear();
for (String key: keys) {
objects.add(map.get(key));
}
}
public class Obj {
public String str;
public Obj(String str) {
this.str = str;
}
@Override
public String toString() {
return str;
}
}
}
版画:
[b, c]
[d, e]