[英]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.