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

2022-08-31 14:15:55

我有一个带有自定义对象的ArrayList。我想在此数组列表中搜索字符串。

对象的类如下所示:

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”字符串的五个对象。


答案 1

简单的方法是制作一个 where,验证自定义对象的 atrrtibute 是否具有所需的字符串forname

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

我认为这对你有帮助。


答案 2

更新:使用 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 - 您可以使用Google Guava库中的谓词,如下所示:

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"));

}

推荐