一个完全新手的问题:如何用Java将一个对象集合的属性转换为另一个对象?
在C#中,我通常使用LINQ的出色语法来完成此类任务。这是一个示例:
List<Hero> Heroes = new List<Hero>()
{
new Hero() { Name = "Iron Man", Superpower = "Being Iron Man, duh", Age = 48 },
new Hero() { Name = "Spider-Man", Superpower = "Spidey things", Age = 16 }
};
List<AlterEgo> AlterEgos = Heroes.Select(x => new AlterEgo { Age = x.Age }).ToList();
在.Select
之后,我得到了两个AlterEgo
,其中Age
分别是48和16。在Java中有没有办法做这种事情?
答案 0 :(得分:1)
Streams是Java与LINQ的相似之处。这是您在Java中使用样式和语法进行修改后的代码的样子:
List<Hero> heroes = Arrays.asList(
new Hero("Iron Man", "Being Iron Man, duh", 48),
new Hero("Spider-Man", "Spidey things", 16)
);
List<AlterEgo> alterEgos = heroes.stream()
.map(x -> new AlterEgo(x.getAge()))
.collect(Collectors.toList());
关于注释的后续内容,Java没有适当的匿名对象,但是您可以创建anonymous classes的实例并访问其属性,只要可以避免命名该类型即可。 Java 10使用var
关键字使此操作变得更容易:
var list = heroes.stream()
.map(x -> new Object() {
int age = x.getAge();
String name = x.getName();
})
.collect(Collectors.toList());
list.forEach(x -> System.out.println(x.age));