java - 从另一个对象列表创建对象元素的列表

标签 java arraylist collections java-stream

型号:

public class MyModel{
    private int id;
    private String name;
    ....
    ....
    //getters and setters
}

我有一个列表 MyModel对象:

//First Object to be added to list
MyModel myModelObject1 = new MyModel();
myModelObject1.setId(1);
myModelObject1.setName("abc");

//Second Object to be added to list
MyModel myModelObject2 = new MyModel();
myModelObject1.setId(2);
myModelObject1.setName("pqr");

List<MyModel> myModelList = new ArrayList<MyModel>();
myModelList.add(myModelObject1);
myModelList.add(myModelObject2);

我想获取 MyModel 中存在的名称列表列表,即我想从 List<String> 创建一个名称列表(在本例中为 myModelList ) 。所以,我希望我的列表包含:

{"abc", "pqr"}

总有一种方法可以迭代并创建另一个列表,但是有更好的方法吗? (不一定高效,但如果可以使用流、foreach 等在一行中完成)。

编辑: 答案对我有用,但我在用例中进行了一些修改:如果我想添加一个条件,即仅应将包含字符“a”的名称添加到列表中,并且我想添加一条记录器消息以对每个元素进行调试那么我应该如何处理这个问题?

我尝试使用方法( charAPresent() )执行以下操作,该方法检查传递的字符串是否包含字符“a”,但它不起作用:

List<String> modelNameList = myModelList.stream()
        .map(model -> {
            if (charAPresent(model.getName)) {
                model.getName() 
            }
        })
        .collect(Collectors.toList());

如果我遗漏了什么,请告诉我。

最佳答案

使用 Java 8 流:

List<String> modelNameList = myModelList.stream()
                                 .map(Model::getName)
                                 .collect(Collectors.toList());

Model::getName 被称为 method reference 。它相当于 model -> model.getName()

关于java - 从另一个对象列表创建对象元素的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56553521/

相关文章:

java - Android 应用程序- 没有此类方法异常

java - Spring MVC + Thymeleaf : adding variable to all templates' context

java - 获取一个 ArrayList,其中包含某些对象类型的两个不同大小的 arraylist 的并集

java - 如何对包含整数的 ArrayList<String> 进行排序?

c# - 同步收集线程安全

arrays - 为什么++ : operator in the Scala language so strange?

java - 检查表是否存在sql server

java - 我应该使用什么集合

java - Java 中的 ArrayList - 我的一行代码有什么问题?

java - Jackson JsonNode 到类型集合