我有一个对象列表,我想根据条件处理对象的子集,然后创建一个包含已处理对象的新列表。
对象列表
miss | shannon sperling
mr | john smith
prof | kim taylor
prof.dr | kim taylor
在上面的列表中,我想要有两个标题的名字(kim taylor
)并粘贴标题,因为 prof
是 prof.dr 的子集.
我的最终列表应如下所示
miss | shannon sperling
mr | john smith
prof.dr | kim taylor
我尝试了以下代码
void gluetitles(List title)
{
for (int i=0;i<title.size();i++) {
String names = (String) title.get(i);
String[] titlename=names.split("\\|");\\split the list with delimiter and extracts titles and names
String tle=titlename[0];
String name=titlename[1];
}
}
但我不知道如何比较并获得具有两个标题的名称。
最佳答案
这段代码工作正常...
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class Notepad {
public static void main(String args[]) {
final List<String> titles = new ArrayList<>();
titles.add("miss | shannon sperling");
titles.add("mr | john smith");
titles.add("prof | kim taylor");
titles.add("prof.dr | kim taylor");
gluetitles(titles);
}
static void gluetitles(final List<String> titles) {
final Map<String, String> titleMap = new HashMap<>();
for (final String names : titles) {
final String[] titleName = names.split("\\|");
final String title = titleName[0];
final String name = titleName[1];
if (doesMapContainName(titleMap, title, name)) {
titleMap.put(name, title);
}
}
for (final Entry<String, String> s : titleMap.entrySet()) {
System.out.println("Name is " + s.getKey() + " Title is "
+ s.getValue());
}
}
private static boolean doesMapContainName(
final Map<String, String> titleMap, final String title,
final String name) {
return (titleMap.get(name) != null && titleMap.get(name).length() < title
.length()) || !titleMap.containsKey(name);
}
}
contain 方法有点脏,但总的来说就是它是否存在于 map 中,检查这个新值是否比我们已知的值长,如果是,则添加它,如果不存在'存在于 map 中,添加它。这假设数据总是像示例中那样连接标题,我们有一个带有 prof.dr
和一个带有 prof
。
关于java - Java中对象的处理列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19831598/