我有一个带有自定义对象的ArrayList。我想在这个ArrayList中搜索Strings。
对象的类看起来像这样:
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”字符串的五个对象。
答案 0 :(得分:88)
简单的方法是创建for
,以验证自定义对象的atrrtibute name
是否具有所需的字符串
for(Datapoint d : dataPointList){
if(d.getName() != null && d.getName().contains(search))
//something here
}
我认为这有助于你。
答案 1 :(得分: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());
如果您不介意使用外部libaray,可以使用Predicates中的Google Guava library,如下所示:
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"));
}
答案 2 :(得分:5)
试试这个
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
}
}
答案 3 :(得分:4)
可能类似于:
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!");
}
}
答案 4 :(得分:4)
要使自定义类在集合中正常工作,您必须实现/覆盖类的equals()
方法。对于排序也会覆盖compareTo()
。
请参阅this article或Google,了解如何正确实施这些方法。
答案 5 :(得分:2)
contains()
方法只需调用equals()
元素上的ArrayList
,因此您可以根据equals()
类变量重载类name
。如果true
等于匹配的equals()
,则从name
返回String
。希望这会有所帮助。
答案 6 :(得分:1)
使用Apache CollectionUtils
:
CollectionUtils.find(myList, new Predicate() {
public boolean evaluate(Object o) {
return name.equals(((MyClass) o).getName());
}
}
答案 7 :(得分:0)
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
}
}
}
答案 8 :(得分:0)
boolean found;
for(CustomObject obj : ArrayOfCustObj) {
if(obj.getName.equals("Android")) {
found = true;
}
}