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