簡體   English   中英

比較,處理和刪除Java列表中的條目

[英]Compare,process and delete entry in Lists in Java

我有兩個帶有對象的列表,其中list1(names)僅具有fullnames without middlenams ,另外一個list2(fullnames)具有fullnames with middle names 如果list1的名稱與barack obama相似,而list2的名稱與barack hussein barack hussein obama相同,但中間名稱相同。 然后,我必須刪除list1中的條目barack obama

我試過下面的代碼,但是它沒有刪除list1中的條目。

public class Test {

       public static void main(String args[]) {

        List<String> names = new ArrayList<>()
        names.add("shannon sperling");
        names.add("john smith");
        names.add("Mary Smith");
        names.add("kim taylor");
        names.add("Barack obama");
        List<String> fullnames = new ArrayList<>();
        fullnames.add("Mary Elizabeth Smith");
        fullnames.add("Lou Henry Hoover");
        fullnames.add("Barack hussein obama");
        for(Object process :names)
        {
            if(fullnames.contains(process))
            {
               names.remove(process);
            }
        }
        System.out.println(names);

       }
}

List.contains()檢查相同的對象。 "Barack obama""Barack hussein obama"顯然是不同的。 您需要重寫contains()或實現自己的實現List的類,並添加一個附加函數以您喜歡的方式比較您的內容。 否則,您的代碼塊看起來不錯。

嘗試這個

for(Object process :names)
        {
            for(Object process1 :fullnames)
            {
            if(process1.contains(process))
            {
               System.out.println("match found");
            }
            }
        }

使用String.contains(characterSequence)方法實際上是無法實現的,因為字符序列必須是連續的。 但是,以下工作代碼應該可以解決您的問題。

for(String fName: fullnames)
        {
            int i;
            for(i =0 ; i< names.size() ;i++)
            {
                String mName = names.get(i);
                String namePart[] = mName.split("\\s+");
                if(namePart.length > 1)
                {
                    int j = fName.indexOf(namePart[0]);
                    if( j > -1 && fName.indexOf(namePart[1], j+namePart[0].length()) > -1)
                        break;

                }
            }

            if(i < names.size())
            {
                System.out.println("removing "+names.remove(i));;

            }
        }

        System.out.println(names);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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