在ArrayList中搜索某些字符串的自定义对象

时间:2012-09-19 13:43:45

标签: java search arraylist custom-object

我有一个带有自定义对象的ArrayList。我想在这个ArrayList中搜索Strings。

对象的类看起来像这样:

public class Datapoint implements Serializable {

  private String stateBased;
  private String name;
  private String priority;
  private String mainNumber;
  private String groupadress;
  private String dptID;

  public Datapoint(){
  }

  public String getMainNumber() {
    return mainNumber;
  }

  public void setMainNumber(String mainNumber) {
    this.mainNumber = mainNumber;
  }

  public String getName() {
    return name;
  }

  ..and so on

我知道如何在ArrayList中搜索字符串但是如何使用我的自定义对象在ArrayList中执行此操作:

ArrayList<String> searchList = new ArrayList<String>();
String search = "a";
int searchListLength = searchList.size();
for (int i = 0; i < searchListLength; i++) {
if (searchList.get(i).contains(search)) {
//Do whatever you want here
}
}

所以我希望有一个函数来搜索我的ArrayList,例如所有“name”字符串的五个对象。

9 个答案:

答案 0 :(得分:88)

简单的方法是创建for,以验证自定义对象的atrrtibute name是否具有所需的字符串

    for(Datapoint d : dataPointList){
        if(d.getName() != null && d.getName().contains(search))
           //something here
    }

我认为这有助于你。

答案 1 :(得分:39)

更新:使用Java 8语法

List<DataPoint> myList = new ArrayList<>();
//Fill up myList with your Data Points

List<DataPoint> dataPointsCalledJohn = 
    myList
    .stream()
    .filter(p-> p.getName().equals(("john")))
    .collect(Collectors.toList());

如果您不介意使用外部libaray,可以使用Predicates中的Google Guava library,如下所示:

class DataPoint {
    String name;

    String getName() { return name; }
}

Predicate<DataPoint> nameEqualsTo(final String name) {
    return new Predicate<DataPoint>() {

        public boolean apply(DataPoint dataPoint) {
            return dataPoint.getName().equals(name);
        }
    };
}

public void main(String[] args) throws Exception {

    List<DataPoint> myList = new ArrayList<DataPoint>();
    //Fill up myList with your Data Points

    Collection<DataPoint> dataPointsCalledJohn =
            Collections2.filter(myList, nameEqualsTo("john"));

}

答案 2 :(得分:5)

试试这个

ArrayList<Datapoint > searchList = new ArrayList<Datapoint >();
String search = "a";
int searchListLength = searchList.size();
for (int i = 0; i < searchListLength; i++) {
if (searchList.get(i).getName().contains(search)) {
//Do whatever you want here
}
}

答案 3 :(得分:4)

可能类似于:

ArrayList<DataPoint> myList = new ArrayList<DataPoint>();
//Fill up myList with your Data Points

//Traversal
for(DataPoint myPoint : myList) {
    if(myPoint.getName() != null && myPoint.getName().equals("Michael Hoffmann")) {
        //Process data do whatever you want
        System.out.println("Found it!");
     }
}

答案 4 :(得分:4)

要使自定义类在集合中正常工作,您必须实现/覆盖类的equals()方法。对于排序也会覆盖compareTo()

请参阅this article或Google,了解如何正确实施这些方法。

答案 5 :(得分:2)

contains()方法只需调用equals()元素上的ArrayList,因此您可以根据equals()类变量重载类name。如果true等于匹配的equals(),则从name返回String。希望这会有所帮助。

答案 6 :(得分:1)

使用Apache CollectionUtils

CollectionUtils.find(myList, new Predicate() {
   public boolean evaluate(Object o) {
      return name.equals(((MyClass) o).getName());
   }
}

答案 7 :(得分:0)

String string;
for (Datapoint d : dataPointList) {    
   Field[] fields = d.getFields();
   for (Field f : fields) {
      String value = (String) g.get(d);
      if (value.equals(string)) {
         //Do your stuff
      }    
   }
}

答案 8 :(得分:0)

boolean found;

for(CustomObject obj : ArrayOfCustObj) {

   if(obj.getName.equals("Android")) {

      found = true;
   }
}