简体   繁体   English

比较,处理和删除Java列表中的条目

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

I have two lists with objects,where list1(names) has just fullnames without middlenams and one more list2(fullnames) has fullnames with middle names . 我有两个带有对象的列表,其中list1(names)仅具有fullnames without middlenams ,另外一个list2(fullnames)具有fullnames with middle names If list1 has name like barack obama and list2 has name barack hussein obama ,which is same but with middlename. 如果list1的名称与barack obama相似,而list2的名称与barack hussein barack hussein obama相同,但中间名称相同。 Then i have to delete the entry barack obama in list1. 然后,我必须删除list1中的条目barack obama

I have tried below code, But it did not delete entries in list1. 我试过下面的代码,但是它没有删除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() checks for same objects. List.contains()检查相同的对象。 "Barack obama" and "Barack hussein obama" are obviously not the same. "Barack obama""Barack hussein obama"显然是不同的。 you need to override contains() or implement an own Class implementing List and add an additional function to compare your content in the way you like. 您需要重写contains()或实现自己的实现List的类,并添加一个附加函数以您喜欢的方式比较您的内容。 Otherwise your code-block looks good. 否则,您的代码块看起来不错。

try this 尝试这个

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

This is not really achievable using String.contains(characterSequence) method because the character sequence must be continuous. 使用String.contains(characterSequence)方法实际上是无法实现的,因为字符序列必须是连续的。 However, the following working code should solve your problem. 但是,以下工作代码应该可以解决您的问题。

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