繁体   English   中英

获取ArrayList <String> 从ArrayList <CustomClass> (LF方法将字符串数据作为数组而不是foreach返回)

[英]Get the ArrayList<String> from ArrayList<CustomClass> (LF method to return string data as array instead of foreach)

这是我的自定义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行,但是看起来很乱。 是否有解决此问题的干净方法?

您必须创建一个方法,该方法可以对arraylist中的所有元素进行迭代,并将每个名称添加到要返回的第二个列表中。 我还没有读懂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;
}

您必须提供自定义类MyClass的吸气剂,并且我使用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和setters。

    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;
        }


     -------------------------------------
    }

尝试遵循以下结构:

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;
    }

有两种明显的解决方案,一种是中间类,例如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类中添加了一个示例。 因此,还有另一种方式。

如果可以导入Apache通用实用程序包,则可以是这样:

    List<String> fieldsValues=
(List<String>)CollectionUtils.collect(beanLs,new BeanToPropertyValueTransformer("fieldNameInBean"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM