Java 从对象列表中查找字符串
我有一个字符串列表和对象列表(SomeObject)。每个SomeObject都将有一个其他对象(SecondaryObject)的列表,并且该对象将有一个string属性。我需要检查字符串属性是否在第一个列表中Java 从对象列表中查找字符串,java,list,arraylist,Java,List,Arraylist,我有一个字符串列表和对象列表(SomeObject)。每个SomeObject都将有一个其他对象(SecondaryObject)的列表,并且该对象将有一个string属性。我需要检查字符串属性是否在第一个列表中 List<String> stringList = new ArrayList<>(Arrays.asList("String1", "String2")); List<SomeObject> objectList; public class S
List<String> stringList = new ArrayList<>(Arrays.asList("String1", "String2"));
List<SomeObject> objectList;
public class SomeObject {
public List<SecondaryObject> secondaryList;
}
public class SecondaryObject {
public String str;
}
for (String mainString : stringList) {
for (SomeObject obj : objectList) {
List<SecondaryObject> secobjList = obj.getSecList();
for (SecondaryObject secObj : secObjList) {
if (secObj.str.equals(mainString)) {
log.log("Found a match");
}
}
}
}
List-stringList=newarraylist(Arrays.asList(“String1”、“String2”);
列表对象列表;
公共类对象{
公开名单第二名单;
}
公共类第二对象{
公共字符串str;
}
用于(字符串:字符串列表){
对于(SomeObject对象:对象列表){
List secobjList=obj.getSecList();
for(第二对象secObj:secObjList){
if(secObj.str.equals(mainString)){
log.log(“找到匹配项”);
}
}
}
}
有没有比这更好的解决方案。如果您不确定任何SecondaryObject中的string属性在SomeObject中的SecondaryObject列表中是否是唯一的,那么我建议首先将该字符串整理成一个集合。 我们的目标是改变这个问题,找到两个字符串列表的交集 那么这个问题可以用两种方法来解决
如果您不确定任何SecondaryObject中的string属性在SomeObject中的SecondaryObject列表中是否是唯一的,那么我建议首先将该字符串整理到一个集合中。 我们的目标是改变这个问题,找到两个字符串列表的交集 那么这个问题可以用两种方法来解决
我建议您使用散列。创建stringList的hashMap,这样就不需要第三个循环了。相反,对于每个secObj的string属性,只要尝试从map中获取它的值,如果它不返回null,那么就会找到匹配项
HashMap<String, Integer> map = new HashMap<String, Integer>();
for(String mainString: stringList){
map.put(mainString, 1);
}
for (SomeObject obj : objectList) {
List<SecondaryObject> secobjList = obj.getSecList();
for (SecondaryObject secObj : secObjList) {
if (map.get(secObj.str) != null) {
log.log("Found a match");
}
}
}
HashMap map=newhashmap();
用于(字符串:字符串列表){
地图放置(主环,1);
}
对于(SomeObject对象:对象列表){
List secobjList=obj.getSecList();
for(第二对象secObj:secObjList){
if(map.get(secObj.str)!=null){
log.log(“找到匹配项”);
}
}
}
从O(n^3)减少到O(n^2)我建议您使用散列。创建stringList的hashMap,这样就不需要第三个循环了。相反,对于每个secObj的string属性,只要尝试从map中获取它的值,如果它不返回null,那么就会找到匹配项
HashMap<String, Integer> map = new HashMap<String, Integer>();
for(String mainString: stringList){
map.put(mainString, 1);
}
for (SomeObject obj : objectList) {
List<SecondaryObject> secobjList = obj.getSecList();
for (SecondaryObject secObj : secObjList) {
if (map.get(secObj.str) != null) {
log.log("Found a match");
}
}
}
HashMap map=newhashmap();
用于(字符串:字符串列表){
地图放置(主环,1);
}
对于(SomeObject对象:对象列表){
List secobjList=obj.getSecList();
for(第二对象secObj:secObjList){
if(map.get(secObj.str)!=null){
log.log(“找到匹配项”);
}
}
}
从O(n^3)减少到O(n^2)我需要获得找到匹配项的辅助对象。好的,这意味着您可以假设字符串是唯一的。一种更简单的方法是创建一个HashMap,只需在HashMapI中查找键,就可以获得找到匹配项的辅助对象。好的,这意味着您可以假设字符串是唯一的。一种更简单的方法是创建一个HashMap,然后在HashMap中查找键