Java 是否可以创建一个包含多个对象的列表,其中这些对象包含多个参数? 简化示例

Java 是否可以创建一个包含多个对象的列表,其中这些对象包含多个参数? 简化示例,java,for-loop,arraylist,collections,jvm,Java,For Loop,Arraylist,Collections,Jvm,假设我将一个人定义为: public class Person (String name, int age) 然后我有一张名单 public class ListOfPeople { private ArrayList<Person> people; } 我知道我可以单独初始化每一个,然后添加它们,我只是想知道我是否可以用上面的方法“动态”创建它们 List<Person> personListConstructor(String... data) {

假设我将一个人定义为:

public class Person (String name, int age)
然后我有一张名单

public class ListOfPeople {
     private ArrayList<Person> people;
}

我知道我可以单独初始化每一个,然后添加它们,我只是想知道我是否可以用上面的方法“动态”创建它们

List<Person> personListConstructor(String... data) {
    List<Person> personList = new ArrayList<>();
    for (int i = 0; i < data.length / 2; i++) {
        personList.add(new Person(data[2 * i], Integer.parseInt(data[2 * i + 1])));
    }
    return personList;
}
ListOfPeople myFriends = new ListOfPeople(new Person("Chris", 33), new Person("Adam",26), new Person("John",50));

这里也有同样的注意事项。

您可以这样做:

List<Person> personListConstructor(String... data) {
    List<Person> personList = new ArrayList<>();
    for (int i = 0; i < data.length / 2; i++) {
        personList.add(new Person(data[2 * i], Integer.parseInt(data[2 * i + 1])));
    }
    return personList;
}
ListOfPeople myFriends = new ListOfPeople(new Person("Chris", 33), new Person("Adam",26), new Person("John",50));

此处的注意事项相同。

您可以创建一个接受
Person
对象数组的构造函数:

public class ListOfPeople {
     private ArrayList<Person> people;

     public ListOfPeople(Person... persons) {
          for (Person person : persons) {
               people.add(person);
          }
     }
}

您可以创建一个接受
Person
对象数组的构造函数:

public class ListOfPeople {
     private ArrayList<Person> people;

     public ListOfPeople(Person... persons) {
          for (Person person : persons) {
               people.add(person);
          }
     }
}

我想知道如何使用lambda,如果有人感兴趣,这里有一个简单的解决方案

public class Person {
    String name;
    int age;

    public Person(List<String> attributes) {
        attributes.stream().findFirst().ifPresent(this::setName);
        attributes.stream().skip(1).findFirst().map(Integer::parseInt).ifPresent(this::setAge);
    }
    // getters, setters

}

public class ListOfPersons {
    List<Person> people;

    public ListOfPersons(String ...persons) {
        final int chunkSize = 2;
        final AtomicInteger counter = new AtomicInteger();

        this.people = Stream.of(persons)
            .collect(Collectors.groupingBy(it -> counter.getAndIncrement() / chunkSize))
            .values()
            .stream()
            .map(Person::new)
            .collect(Collectors.toList());
        System.out.println(Arrays.toString(this.people.toArray()));
    }
}

我想知道如何使用lambda,如果有人感兴趣,这里有一个简单的解决方案

public class Person {
    String name;
    int age;

    public Person(List<String> attributes) {
        attributes.stream().findFirst().ifPresent(this::setName);
        attributes.stream().skip(1).findFirst().map(Integer::parseInt).ifPresent(this::setAge);
    }
    // getters, setters

}

public class ListOfPersons {
    List<Person> people;

    public ListOfPersons(String ...persons) {
        final int chunkSize = 2;
        final AtomicInteger counter = new AtomicInteger();

        this.people = Stream.of(persons)
            .collect(Collectors.groupingBy(it -> counter.getAndIncrement() / chunkSize))
            .values()
            .stream()
            .map(Person::new)
            .collect(Collectors.toList());
        System.out.println(Arrays.toString(this.people.toArray()));
    }
}

姓名和年龄的来源是什么?做
新的人物列表(新人(“克里斯”,33岁)、新人(“亚当”,26岁)、新人(“约翰”,50岁))
有什么问题吗?然后,在创建它们之后,您不会添加它们,而且它仍然是动态的。如果这不起作用,您可以始终为自己创建一个自定义的
ArrayList
类,该类继承基本的
ArrayList
,并具有一个自定义构造函数,该构造函数接受字符串并初始化所有内容,以便您可以像示例中那样传递数据。您还可以从java 9+的
java.util.Map.of中获得一些灵感(K,V,K,V,…)
仅供记录:人员列表,您可以通过创建一个简单的
List
对象来解决问题。如果您的类仅包含该内部列表……那么它不会为您的设计添加任何值。Java已经有了集合。您的新类只会让事情变得更困难,例如,您必须实现equals(),hashCode(),和toString()为了做一些有用的事情。所以,首先要做的是:问问自己是否真的需要或想要某个特殊的类列表。或者,反过来说:你认为你想为每个类创建这样一个新的类吗any@GhostCat在现实生活中,这个场景更复杂,需要的不仅仅是一个简单的列表,我只是在剥离为了简洁易懂,请记下这组名字和年龄的来源是什么?做
新的人物列表(新人(“克里斯”,33岁)、新人(“亚当”,26岁)、新人(“约翰”,50岁))有什么不对吗
?那么在创建它们之后,您就不会添加它们,而且这仍然是一种动态操作。如果这不起作用,您可以始终为自己创建一个自定义
ArrayList
类,该类继承基本
ArrayList
,并具有一个自定义构造函数,该构造函数接受字符串并初始化所有内容,以便您可以传入数据您还可以从Java9+的
java.util.Map.of(K,V,K,V,…)中获得一些灵感
仅供记录:人员列表,您可以通过创建一个简单的
列表
对象来解决问题。如果您的类仅包含该内部列表……那么它不会为您的设计增加任何价值。Java已经有了集合。您的新类只会让事情变得更困难,例如,您必须实现equals()、hashCode()和toString()为了做一些有用的事情。所以,首先要做的是:问问自己是否真的需要或想要某个特殊的类列表。或者,反过来说:你认为你想为每个类创建这样一个新的类吗any@GhostCat在现实生活中,这个场景更复杂,需要的不仅仅是一个简单的列表,我只是在剥离为了简洁易懂,我把它写了下来。也许不是最优雅的,但它确实符合我的要求!也许不是最优雅的,但它确实符合我的要求!我需要花一些时间来阅读和理解它是如何工作的,但这看起来非常令人印象深刻!我不熟悉streams,也不知道Atom是什么icInteger是,但我会做一些研究:)我会花一些时间来阅读和理解这是如何工作的,但这看起来非常令人印象深刻!我不熟悉streams,也不知道什么是原子整数,但我会做一些研究:)