使用Java 8的stream/map创建列表对象

4

我有一个对象列表。我想用一个方法从这个列表中创建单独的对象,而不是总是调用:personList.get(0), personList.get(1)等等。对象名称应该是来自列表元素的Person名称。

List<Person> personList = ...;

我希望能够遍历personList并为列表中的每个对象按名称创建新对象。Person类包含一个带有getter的name属性。我该如何做到这一点?

你想返回一个只包含姓名的Person列表吗?还是其他什么要求? - Youcef LAIDANI
你的问题不是很清楚。你能提供一个样本列表输入和样本期望输出吗?你所说的“它逐个案例运作”是什么意思?在上述情况中有什么不起作用的地方? - gagan singh
我更新了描述,并删除了误导性的代码。希望现在清楚了。谢谢! - arena
2个回答

7
只需流式传输列表,然后按以下方式调用map操作:
personList.stream()
          .map(x -> new T(x.getName()))
          .collect(Collectors.toList());

在这里,T 是你想要创建的新元素类型,例如 StudentPersonEmployee 等。


但是collect正在将其收集到一个列表中。 我的主要目的是遍历列表并将每个元素作为新的Person对象获取。 或者我错过了什么?谢谢! - arena
@arena 这正是代码所做的事情。遍历所有元素并使用人名构建新对象。如果您不将新元素收集到列表中,那么您将把构建的新对象存储在哪里呢? - Ousmane D.
让它有意义!谢谢! - arena

-1

只是一个简单的forEach循环:

personList.forEach(p -> {
  T newObject = new T(p.getName());
  // Do what you need to do with each new object
});

如果你想要做更复杂的事情,那么Aonminè的回答可能是你真正需要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接