gpt4 book ai didi

java - 如何从JAVA中的任何类列表中复制特定字段?

转载 作者:行者123 更新时间:2023-12-01 17:56:23 25 4
gpt4 key购买 nike

让我开始描述我的问题。

我有一个类 Person,它存储在 mPeople List 中。所以这确实意味着 mPeople 将存储“姓名”和“年龄”。但在某种情况下,我需要一个包含所有人员姓名的列表以及不同列表中所有人员年龄的列表。

那么有没有办法将列表中某个类的特定字段中的所有数据复制到另一个列表或其他地方?

注意:我知道我可以使用 for 循环或增强 for 循环来执行此操作,但它看起来不太好。所以只是好奇是否有人找到了更好的解决方案......我将感谢您的帮助!

public class Person
{

// fields
private int age;
private String name;


// constructor
public Person( int age, String name )
{
this.age = age;
this.name = name;
}


// getter
public int getAge()
{
return age;
}

public String getName()
{
return name;
}
}


//list of People
List<Person> mPeople = new ArrayList<>();
mPeople.add( new Person( 10, "Sovanara" ) );
mPeople.add( new Person( 20, "Dara" ) );

最佳答案

如果您使用的是 Java 8,您可以映射流:

final List<String> names = mPeople.stream()
.map( it -> it.getName())
.collect(Collectors.toList());

final List<Integer> ages= mPeople.stream()
.mapToInt( it -> it.getAge())
.collect(Collectors.toList());

我在这里分两次进行此操作,以向您展示它们各自的外观。如果您愿意执行一次,您可以将这些作为 forEach 中的副作用来执行。如果您的资源紧张,对于可能值得考虑的大量人员。

编辑:单遍解决方案(取决于副作用):

final List<String> names = new ArrayList<>();
final List<Integer> ages = new ArrayList<>();
mPeople.stream().forEach({ it ->
names.add(it.getName());
ages.add(it.getAge());
});

由于您也将其标记为 Kotlin,因此解决方案类似:

val names = mPeople.map { it.name }
val ages = mPeople.map { it.age }

关于java - 如何从JAVA中的任何类列表中复制特定字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com