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

您必须创建一个方法来迭代您的数组列表中的所有元素并将每个名称添加到您将返回的第二个列表中。我还没有读过 Java 的 lambda 表达式,但如果我回忆起我的 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

您必须提供自定义类 MyClass 的 getter,并且我使用 List 接口作为返回类型而不是 ArrayList,因为它更灵活。
你可以试试这个,如果有任何问题,请告诉我。
请找到代码片段:

 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,我刚刚在此处添加了 getter 和 setter。

    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 回答
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 回答
0

有两种明显的解决方案,一种是中间类,比如 ClassList,它包含 MyClass 的私有 ArrayList 和对其进行操作的方法。如果您需要的不仅仅是迭代器,则特别有用。另一种解决方案是将迭代器代码放在 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 回答
0

如果可以导入 Apache 常用的实用程序包,那么可以是这样的:

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