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

Mok*_*pps 59 java search arraylist custom-object

我有一个带有自定义对象的ArrayList.我想在这个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
Run Code Online (Sandbox Code Playgroud)

我知道如何在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
}
}
Run Code Online (Sandbox Code Playgroud)

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

Ren*_*tti 89

简单的方法是for在验证name自定义对象的atrrtibute是否具有所需字符串的位置

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

我认为这有助于你.

  • 您可以在Datapoint类内实现一个对所有属性进行验证的方法。这样,您只需在IF处调用此方法,如果对象在一个属性处是否具有所需的字符串,它将返回。其他解决方案是使用Reflection并获取所有方法,但是我认为这已经过头了。 (2认同)

mun*_*ngm 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());
Run Code Online (Sandbox Code Playgroud)

如果你不介意使用外部libaray -您可以使用谓词谷歌番石榴库如下:

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

}
Run Code Online (Sandbox Code Playgroud)

  • 这个答案和上一个答案在表现上有区别吗? (2认同)

G_S*_*G_S 7

试试这个

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
}
}
Run Code Online (Sandbox Code Playgroud)


gtg*_*ola 5

大概是这样的:

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!");
     }
}
Run Code Online (Sandbox Code Playgroud)


Rid*_*lly 5

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

有关如何正确实现这些方法的信息,请参阅本文或google。