第二个问题,继续第一个问题。 我有两个字符串列表。有一个字符串列表 (asu) - M1、M2、M3 ... 以及一个字符串列表 (rzs) - M1、M2、M3 及其所有可能的组合。需要为每个元素(asu)(例如M1)找到(rzs)中的一个元素(M1,M1M2,..),其中包含(例如M1)。示例:从 (asu) 获取 M1 并将开始在 (rzs) 中搜索重复项(包含)。我们在 (rzs) 中找到了 M1M2,它包含了 M1。之后我们应该从列表中删除这两个元素。非常感谢 No Idea For Name 帮助修改了这段代码。但是程序总是失败,因为 AbstractList.remove 错误。请帮助实现逻辑和调整代码!
Imports..........
public class work{
List<string> asu = Arrays.asList("M1","M1","M1","M3","M4","M5","M1","M1","M1","M4","M5","M5");
List<string> rzs = Arrays.asList("M1","M2","M3","M4","M5",
"M1M2","M1M3","M1M4","M1M5","M2M3","M2M4","M2M5","M3M4","M3M5","M4M5"
,"M1M2M3","M1M2M4","M1M2M5","M1M3M4","M1M3M4","M1M4M5","M2M4","M2M5");
public static void main(String[] args) {
work bebebe = new work();
bebebe.mywork();
}
List<string> tmp1 = new ArrayList<string>();
List<string> tmp2 = new ArrayList<string>();
System.out.println(Arrays.deepToString(rzs));
System.out.println(Arrays.deepToString(asu));
for (string curr : asu){
for (string currRzs : rzs){
System.out.println("New iteration ");
if (currRzs.contains(curr)) {
System.out.println("Element ("+curr+") in ASU =
element ("+currRzs+") in RZS");
if(tmp1.contains(curr) == false)
tmp1.add(curr);
if(tmp2.contains(currRzs) == false)
tmp2.add(currRzs);
}
}
}
for (string curr : tmp1){
asu.remove(curr);
}
for (string currRzs : tmp2){
rzs.remove(currRzs);
}
最佳答案
您应该尝试使用 Collection 的 removeAll() 或 retainAll() 方法。
例如:
List<String> aList = new ArrayList<String>();
aList.add("a");
aList.add("b");
aList.add("c");
aList.add("d");
aList.add("e");
List<String> bList = new ArrayList<String>();
bList.add("b");
bList.add("e");
bList.add("d");
aList.removeAll(bList);
会给你aList中剩下的“a”和“c”元素
如果你尝试使用 retainAll() 方法:
aList.retainAll(bList);
将为您提供 aList 中剩余的“b”、“d”和“e”元素;
retainAll()
用于删除调用集合中不属于给定集合的所有元素。
removeAll()
用于从另一个集合中删除一个集合的所有元素。
因此,这完全取决于您的用例。
编辑
如果在任何情况下你想在有条件地迭代时从这些集合中删除一些元素,那么你应该首先获得 Iterator<Type>
然后调用remove()
方法。
喜欢:
while(iterator.hasNext()){
String str = iterator.next();
if(str.equals('test')){
iterator.remove();
}
}
关于 java 。如何从两个列表中删除重复的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18056297/