有没有办法在 Java 中实现与下划线选择函数相同的功能?如果是这样,如何?



请考虑以下代码:

import java.util.*;
public class Main{
public static void main(String []args){
List<Person> items=new ArrayList<>();
items.add(new Person(1,"hari","aa"));
items.add(new Person(2,"das","bb"));
items.add(new Person(3,"giri","cc"));
System.out.println(items);
};
}

class Person{
int num;
String name;
String dept;
Person(int num,String name,String dept){
this.num=num;
this.name=name;
this.dept=dept;
}   
}

然后我需要从这个对象构造一个列表,该对象在列表中只有名称和 dept 属性。有没有办法实现相同的方法?

例如 现有数组的形式为: [{num:1,name:"hari",dept:"aa"},{num:2,name:"das",dept:"bb"},{num:3,name:"giri",dept:"cc"}]

新数组需要像: [

{name:"hari",dept:"aa"},{name:"das",dept:"bb"},{name:"giri",dept:"cc"}]

只需创建第二个构造函数:

class Person{
int num;
String name;
String dept;
Person(int num,String name,String dept){
this.num=num;
this.name=name;
this.dept=dept;
}   
Person(String name,String dept){
this.name=name;
this.dept=dept;
}   
}

注意:Person 对象仍将具有 num 属性,但它将设置为默认值 (0(。如果这不是你想要的,也许使用一个只有名称和部门的基类 Person,以及一个具有所有三个属性的子类 IndexedPerson(或任何你想称呼它的东西(。

创建一个PersonNameDeptDto类:

public class PersonNameDeptDto {
private String name;
private String dept;
public PersonNameDeptDto(Person p) {
this.name = p.name;
this.dept = p.dept;
}
}

然后填充您的列表:

List<PersonNameDeptDto> items=new ArrayList<>();
items.add(new PersonNameDeptDto(new Person(1,"hari","aa")));

作为旁注,通常最好在 dto 中包含id,除非您有另一个唯一标识符。

我认为你应该使用 Java 流将你的 Person 列表转换为你想要的对象。像这样:

items.stream() .map(person -> new SimplePerson(person.name, person.dept) .collect(Collectors.toList());

其中 SimplePerson 是 Person 类的"简化"版本。例如:

class SimplePerson{
String name;
String dept;
public SimplePerson(String name,String dept){
this.name=name;
this.dept=dept;
}   
}

最新更新