在 Java 中从数组创建对象



我有两个列表,我正在尝试使用此列表中的元素创建一个对象。

例如。

["John Wick" , "New York" , 530520 , 560999 ] 和 ["Alex Souza" , "Houston", 556895]

有些列表可能有 1 个数字,有些列表可能有更多数字。

如何创建?

我的建议是:

  1. 将这些输入作为字符串存储在 ArrayList 中(因此您不必定义长度)
  2. 将 ArrayList 作为对象构造的输入
  3. 将字符串解析为整数。
public class Obj {
String name;
String city;
int[] num;

public Obj(ArrayList<String> in){
name = in.get(0);
city = in.get(1);
for(int i = 2; i < in.size(); i++){
num[i-2] = Integer.parseInt(in.get(i));
}
}
}

允许您致电

Obj o = new Obj(inArrayList);

以生成所需的对象,以标识符o为例。

不要忘记导入java.util.ArrayList.

记录

在 Java 16+ 中,记录功能是编写类的简短方法,该类的主要目的是透明且不可变地传达数据。您只需定义 ea h 成员字段的类型和名称。编译器隐式创建构造函数、getter、equals&hashCodetoString

record Person ( String name , String city , List< Integer > numbers ) {}

例示。

Person p = new Person( "John Wick" , "New York" , List.of( 530520 , 560999 ) ) ;

收集。

List< Person > people = new ArrayList<>() ;
people.add( p ) ;

工厂方法

我们可以添加一个static工厂方法,将您的特定输入转换为Person对象。我们根据java.time框架建立的命名约定Person.of命名我们的工厂方法。

int... nums中的伪省略号(三重句号字符)告诉 Java 允许该类型的一系列参数中的零个、一个或多个。参数作为该类型的数组到达我们。所以在我们的代码中,我们期望一个int数组,一个int[]。将该int数组传递给IntStream.of将生成一个int值流。对于这些int值中的每一个,我们通过调用.boxed()将其从基元转换为Integer对象。最后,我们通过调用toList将这些Integer对象收集到List< Integer >中。有了List< Integer >,我们可以调用Person记录的构造函数。

package work.basil.demo;
import java.util.List;
import java.util.stream.IntStream;
public record Person(String name , String city , List < Integer > numbers)
{
static Person of ( String name , String city , int... nums )
{
return new Person( name , city , IntStream.of( nums ).boxed().toList() );
}
}

用法:

List < Person > people =
List.of(
Person.of( "John Wick" , "New York" , 530520 , 560999 ) ,
Person.of( "Alex Souza" , "Houston" , 556895 )
);

people.toString() = [Person[name=John Wick, city=New York, numbers=[530520, 560999]], Person[name=Alex Souza, city=Houston, numbers=[556895

]]]

最新更新