カスタムオブジェクトを持つ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
}
}
そのため、たとえば、すべての「名前」文字列の5つのオブジェクトを使用して、ArrayListを検索する関数が必要です。
簡単な方法は、カスタムオブジェクトの属性for
に目的の文字列があるかどうかを確認する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の使用を気にしない場合は、次のように 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
}
}
コレクションでカスタムクラスを適切に機能させるには、クラスのequals()
メソッドを実装/オーバーライドする必要があります。並べ替えの場合は、compareTo()
もオーバーライドします。
これらのメソッドを適切に実装する方法については、 この記事 またはgoogleを参照してください。
おそらく次のようなもの:
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!");
}
}
contains()
メソッドはArrayList
要素でequals()
を呼び出すだけなので、name
クラス変数に基づいてクラスのequals()
をオーバーロードできます。 true
が一致するname
と等しい場合、equals()
からString
を返します。お役に立てれば。
Apache CollectionUtils
を使用:
CollectionUtils.find(myList, new Predicate() {
public boolean evaluate(Object o) {
return name.equals(((MyClass) o).getName());
}
}
boolean found;
for(CustomObject obj : ArrayOfCustObj) {
if(obj.getName.equals("Android")) {
found = true;
}
}
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
}
}
}