在ArrayList中使用自定义对象来search特定的string

我有一个ArrayList与自定义对象。 我想在这个ArrayList中searchstring。

对象的类如下所示:

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中searchstring,但是如何在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中search所有“名称”string的五个对象。

简单的方法是在你validation自定义对象的atrrtibute name是否具有所需的string的地方做一个

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

我认为这可以帮助你。

更新:使用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库中的 Predicates ,如下所示:

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

尝试这个

 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 } } 

可能是这样的:

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

为了让自定义类在集合中正常工作,您必须实现/重写类的equals()方法。 对于sorting,还可以覆盖compareTo()

看到这篇文章或谷歌有关如何正确实施这些方法。

contains()方法只是调用ArrayList元素的equals() ,所以你可以根据name类variables重载你的类的equals() 。 如果name等于匹配的String则从equals()返回true 。 希望这可以帮助。

使用Apache CollectionUtils

 CollectionUtils.find(myList, new Predicate() { public boolean evaluate(Object o) { return name.equals(((MyClass) o).getName()); } } 
 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 } } }