初始化对象(e.x Person)并为其赋予字段(e.x名称)的唯一值的最佳方法是什么?

时间:2018-03-27 16:11:50

标签: java object initialization

主要目标是创建充满20 Group的{​​{1}}的两个示例(每个Person必须具有Person的唯一值来自name数组的20个。我意识到,通过我的代码,我只能创建两个names,因为所有值都将从名称中删除。

在我开始填充第二组之前,重新初始化列表one的最佳方法是什么?

names

Group是一个对象,我创建了20个Person实例

public class Person {
static ArrayList<String> names = initArrayList();
private String name;

public Person() {
    this.setName(getNameFromArrayList());
}

public Person(final String name) {
    this.name = name;
}


private String getNameFromArrayList() {
    Random random = new Random();
    int indexOfName = random.nextInt(names.size());
    return names.remove(indexOfName);
}

private static ArrayList<String> initArrayList() {
    String[] names = {"Michael", "Daniel", "John", "Andrew", "Thomas",
            "James", "Henry", "Peter", "Mario", "Erik",
            "Sergio", "Emily", "Ruby", "Julia", "Isabella",
            "Ashley", "Jessica", "Victoria", "Catherine",
            "Elisabeth", "Sam", "Alex"};
    return new ArrayList<String>(Arrays.asList(names));
}

public String getName() {
    return name;
}

public void setName(final String aName) {
    this.name = aName;
}

}

这是Main

public class Group {
  ArrayList<Person> people = new ArrayList<>();

  Group(){
      for(int i = 0; i<20; i++){
          people.add(new Person());
      }
  }
}

1 个答案:

答案 0 :(得分:0)

shuffle()该列表然后使用前20个:

Group() {
    Collections.shuffle(names);
    names.stream().limit(20).map(Person::new).forEach(people::add);
}