1

我有两个包含对象的列表,其中 list1(names) 只有fullnames without middlenams一个,而另外一个 list2(fullnames) 有fullnames with middle names。如果 list1 有 name likebarack obama并且 list2 有 name barack hussein obama,这是相同的但有中间名。然后我必须删除barack obamalist1中的条目。

我试过下面的代码,但它没有删除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);

       }
}
4

3 回答 3

1

List.contains()检查相同的对象。"Barack obama"并且"Barack hussein obama"显然不一样。您需要覆盖contains()或实现一个自己的类实现List并添加一个附加功能以您喜欢的方式比较您的内容。否则你的代码块看起来不错。

于 2013-11-11T12:28:41.500 回答
0

使用方法实际上无法实现这一点,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);
于 2013-11-11T12:44:20.327 回答
0

尝试这个

for(Object process :names)
        {
            for(Object process1 :fullnames)
            {
            if(process1.contains(process))
            {
               System.out.println("match found");
            }
            }
        }
于 2013-11-11T12:28:58.300 回答