我有一个自定义的对象的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
我知道如何搜索字符串中的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与搜索例如五个对象为所有“名”的字符串。
最简单的办法是让一个for
在那里你验证,如果atrrtibute name
自定义对象的有希望的字符串
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 -您可以使用谓词从谷歌番石榴库如下:
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()
之类的方法。 对于还排序重写compareTo()
请参阅这篇文章或谷歌如何正确地实现这些方法。
contains()
方法只是调用equals()
在ArrayList
元素,所以你可以重载类的equals()
基础上, name
类变量。 返回true
从equals()
,如果name
等于匹配的String
。 希望这可以帮助。
使用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
}
}
}
boolean found;
for(CustomObject obj : ArrayOfCustObj) {
if(obj.getName.equals("Android")) {
found = true;
}
}