![](/img/trans.png)
[英]Select DISTINCT values form @ElementCollection List<String> in @NamedQuery
[英]Create a distinct List<String>
我有三個List<String>
類型的列表,分別命名為list1
、 list2
和list3
。
我將一些項目添加到list1
中,然后將它們復制到一個新列表list2
中。 然后我創建list3
以添加更多項目,然后再次將它們復制到list2
。 但是,我需要list2
包含不同的項目,那么如何排除重復項目並避免將它們添加到list2
中?
這是我嘗試過的:
List<String> list2 = new ArrayList<>();
List<String> list1 = new ArrayList<>();
list1.add("String1");
list1.add("String2");
list2.addAll(list1);
List<String> list3 = new ArrayList<>();
list3.add("String1");
list3.add("String3");
list2.addAll(list3);
取決於您要投入的“努力”量和列表的大小(以及性能)。
您可以簡單地遍歷 list3 的元素:
list3.forEach(s ->
{
if (list2.contains(s))
{
list2.remove(s);
}
else
{
list2.add(s);
}
});
您必須使用模式 Iterator 來刪除列表中的元素,這對您來說效果很好:
Iterator<String> iter = list2.iterator();
String value = "String1";
while(iter.hasNext()) {
if(iter.next().equals(value)) {
iter.remove();
}
}
下面我展示了您所期望的示例。 在將 list3 元素添加到 list2 之前,我們將過濾掉 list2 中也存在於 list3 中的所有元素。
import java.util.*;
public class Main {
public static void main(String args[]) {
ArrayList<String> list1 = new ArrayList<>();
ArrayList<String> list2 = new ArrayList<>();
ArrayList<String> list3 = new ArrayList<>();
list1.add("string1");
list1.add("string2");
list1.add("string4");
list2.addAll(list1);
System.out.println("\nPrinting List2 Elements");
for(String element : list2){
System.out.println(element);
}
list3.add("string3");
//these will be the duplicates that we will find in list2,
//before adding list3, we will remove them from list 2
list3.add("string2");
list3.add("string1");
//filtering out list3 elements from list2
System.out.println("\nPrinting List3 Elements");
for(String element : list3){
System.out.println(element);
int indexOfElement = list2.indexOf(element);
if(indexOfElement != -1) //means it has found the element in the list
{
list2.remove(indexOfElement);
}
}
//Now list2 doesn't contain any element that exists in list3
System.out.println("\nPrinting List2 Elements after filtering");
for(String element : list2){
System.out.println(element);
}
list2.addAll(list3);
System.out.println("\nPrinting List2 Elements");
for(String element : list2){
System.out.println(element);
}
}
}
這是帶有源代碼鏈接的 output 的示例
我有三個List<String>
類型的List<String>
,分別命名為list1
、 list2
和list3
。
我將一些項目添加到list1
然后將它們復制到一個新列表list2
。 然后我創建list3
以添加更多項目,然后再次將它們復制到list2
。 但是,我需要list2
來包含不同的項目,那么我將如何排除重復的項目並避免將它們添加到list2
?
這是我嘗試過的:
List<String> list2 = new ArrayList<>();
List<String> list1 = new ArrayList<>();
list1.add("String1");
list1.add("String2");
list2.addAll(list1);
List<String> list3 = new ArrayList<>();
list3.add("String1");
list3.add("String3");
list2.addAll(list3);
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public final class Answer {
private static final List<String> LIST_ONE = Arrays.asList("String1", "String2");
private static final List<String> LIST_THREE = Arrays.asList("String1", "String3");
public static void main(String... args) {
// if order is not important then use a java.util.HashSet instead
final Set<String> strings = new LinkedHashSet<>(LIST_ONE);
strings.addAll(LIST_THREE);
final List<String> list_two = new ArrayList<>(strings);
System.out.println("list_two = " + list_two);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.