2

これが私のカスタムですClass(読みやすくするために、名前を翻訳し、コンストラクターなどを残しました)

public class MyClass {
    private long id;
    private String name, description;
    private int pictureId;
    ...
}

したがって、このクラスを使用して、すべてのデータをArrayList<MyClass>

ArrayList<MyClass> items = getResources(); //fills the arraylist

すべての名前を返したいと思います。

のようなカスタムメソッドを書くことは可能ArrayList<String> names = items.getAllNames();ですか? ではなく に対処するロジックをどこに配置すればよいかわからArrayListないためClassです。

getAllNames()
{
    for (MyClass item : items){
        names.add(item.getName());
    }
}

ArrayList から何かが必要になるたびに foreach 行を挿入することはできますが、とても面倒です。これを解決するきれいな方法はありますか?

4

5 に答える 5

2

arraylist 内のすべての要素を反復処理し、返される 2 番目のリストにすべての名前を追加するメソッドを作成する必要があります。私はまだ Java のラムダ式を読んでいませんが、C# の経験から何か思い出せば、Java 8 でこれを行うことができるかもしれません。

public List<String> getNames(){
  List<String> names = new ArrayList<>();
  List<MyClass> elements = getElements();

  for(MyClass s : elements){
     names.add(s.getName());
  }

  return names;
}
于 2013-03-18T12:20:13.013 に答える
1

この構造に従うようにしてください:

public class MyClass {
        private long id;
        private String name, description;
        private int pictureId;
        ...
    }

    public class Itemlist {
        public ArrayList<MyClass> items = new ArayList<MyClass>();

    public ArrayList<String> getAllNames()
    {
        ArrayList<String> names= new ArrayList<String>();
        for (MyClass item : items){
            names.add(item.getName());
        }
    return names;
    }
于 2013-03-18T12:21:18.653 に答える
1

カスタム クラス MyClass のゲッターを提供する必要があります。より柔軟であるため、返される型として ArrayList の代わりに List インターフェイスを使用します。
これを試してみて、懸念がある場合はお知らせください。
コード スニペットを見つけてください。

 import java.util.ArrayList;
 import java.util.List;
   class Test{

        private List<MyClass> getResources() {
            // TODO Auto-generated method stub
                // Use your business logic over here
              ----------------------------------
            return new ArrayList<MyClass>();
        }
        // This is your method which will returns all the names
        public List<String> getAllNames(){
            List<String> names = new ArrayList<String>();
            List<MyClass> items = getResources();
            for (MyClass myClass : items) {
                names.add(myClass.getName());
            }
            return names;
        }
    }

これがあなたの Bean クラス MyClass です。ここにゲッターとセッターを追加しました。

    public class MyClass {
        private long id;
        private String name;
        private String description;
        private int pictureId;

        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }


     -------------------------------------
    }
于 2013-03-18T12:19:47.933 に答える
0

Apache共通ユーティリティパッケージをインポートできる場合は、次のようになります。

    List<String> fieldsValues=
(List<String>)CollectionUtils.collect(beanLs,new BeanToPropertyValueTransformer("fieldNameInBean"));
于 2013-03-19T06:23:14.917 に答える
0

明らかな解決策は 2 つあります。1 つは、MyClass のプライベート ArrayList とそれを操作するメソッドを含む ClassList などの中間クラスです。イテレータ以外のものが必要な場合に特に便利です。もう 1 つの解決策は、反復子コードを MyClass クラス自体に配置することです。ここでは中間クラスを使用しています。

public ClassList {
    ArrayList<MyClass> list = null;

    public void ClassList () {
        if (list == null)
            list = new ArrayList<MyClass> ();
    }


    public ArrayList<String> getAllNames(ArrayList<MyClass> fred) {

        ArrayList<String> names = new ArrayList<String>();

        for (MyClass fred : items) {
            names.add(items.getName());
        }
        return names;
    }
}

ミランが MyClass クラス内でそれを行う例を追加したようです。だから別の方法があります。

于 2013-03-18T12:19:56.653 に答える