您可以使用Map
fromString
到您的对象类型(我用来Obj
制作 SSCCE)。
假设我们得到一个 listobjects
和一个 list strings
。
脚步:
- 将所有变量放入
objects
a 中map
,并将其str
变量作为键
- 使用获取所有这些
str
变量map.keySet()
- 获取所有 in
objects
但不在strings
by中的字符串keys.removeAll(strings)
- 获取所有 in
strings
但不在objects
by中的字符串strings.removeAll(keys)
- 获取
objects
对应于剩余的keys
请注意,在步骤 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]