簡體   English   中英

創建一個獨特的列表<string></string>

[英]Create a distinct List<String>

我有三個List<String>類型的列表,分別命名為list1list2list3

我將一些項目添加到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> ,分別命名為list1list2list3

我將一些項目添加到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM