66

カスタムオブジェクトを含む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を検索する関数が必要です。

4

9 に答える 9

106

簡単な方法は、カスタムオブジェクトforの属性に目的の文字列があるかどうかを確認する場所を作成することです。name

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

これはあなたに役立つと思います。

于 2012-09-19T13:51:02.273 に答える
43

更新:Java8構文の使用

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());

外部ライブラリを使用してもかまわない場合は、次のようにGoogleGuavaライブラリの述語を使用できます。

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

}
于 2012-09-19T14:06:23.160 に答える
8

これを試して

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
}
}
于 2012-09-19T13:46:33.500 に答える
5

おそらく次のようなものです:

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!");
     }
}
于 2012-09-19T13:46:45.557 に答える
5

カスタムクラスがコレクションで正しく機能するにequals()は、クラスのメソッドを実装/オーバーライドする必要があります。並べ替えの場合もオーバーライドしますcompareTo()

これらのメソッドを適切に実装する方法については、この記事またはgoogleを参照してください。

于 2012-09-19T13:50:18.820 に答える
2

contains()メソッドは要素を呼び出すだけequals()ArrayListので、クラス変数equals()に基づいてクラスをオーバーロードできます。ifが一致するものと等しい場合からname戻ります。お役に立てれば。trueequals()nameString

于 2012-09-19T13:48:54.280 に答える
1

使用Apache CollectionUtils

CollectionUtils.find(myList, new Predicate() {
   public boolean evaluate(Object o) {
      return name.equals(((MyClass) o).getName());
   }
}
于 2013-07-19T17:57:20.987 に答える
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
      }    
   }
}
于 2012-09-19T14:05:03.503 に答える
0
boolean found;

for(CustomObject obj : ArrayOfCustObj) {

   if(obj.getName.equals("Android")) {

      found = true;
   }
}
于 2019-04-22T06:59:22.247 に答える