【问题标题】:How to show all items in ArrayList that contain duplicate values?如何显示 ArrayList 中包含重复值的所有项目?
【发布时间】:2016-05-14 09:38:41
【问题描述】:

我有一个包含姓名、年龄和汽车的人员列表。我可以打印出一组的字符串值。但是,当我在列表中添加另一个名称、年龄、汽车时,只显示最后一个项目/列表。如何打印出两组人员数据?

    List<People> peopleInfo = getInfo(ppl);
    String peopleResults = mapper.writeValueAsString(peopleInfo);
    for(People model : peopleInfo) {          
        People people = new People(model.getName(), model.getAge(), model.getCar());
        ToJSON peop = new ToJSON(people);

         ObjectMapper mapper2 = new ObjectMapper();
         ObjectWriter writer = mapper2.writer(new DefaultPrettyPrinter());
         writer.writeValue(new File("file.json"), peop);

getInfo 方法

private List<People> getInfo(String ppl) {
    List<People> peopleList = new ArrayList<People>();
    People people = new People();

    //1st Person
    people.setName("Tim");
    people.setAge("22");
    people.setCar("Ford");

    //Second Person
    people.setName("Susan");
    people.setAge("42");
    people.setCar("Toyota");

    peopleList.add(people);

    return peopleList;
}

【问题讨论】:

  • 您没有创建两个 People 对象。您只是创建一个,而在第二次分配时会删除值。
  • 谢谢。如果我不知道会有多少人怎么办。换句话说,我不会设置我的值,而是从数据库中检索。这就是 DB 中的 ID 字段的来源吗?
  • 一切都取决于您想对人员列表做什么。您必须迭代来自数据库并包含人员的列表。然后做一些你认为对你的功能来说必要的工作。我不清楚你的需求。
  • 我会从数据库中获取项目并以 JSON 格式显示它们。列表中可能有 50 个人具有类似和类似的信息。因此,在上面的代码中,我返回了一个 peopleList 并以 JSON 格式编写它。

标签: java arraylist collections hashmap


【解决方案1】:

因为people 对象将包含最新的值。你需要像这样每次都传递新对象,

People people = new People();

一个简单的例子是你可以这样做,

People people = new People();

//1st Person
people.setName("Tim");
people.setAge("22");
people.setCar("Ford");

//Second Person
 People people2 = new People();

people2.setName("Susan");
people2.setAge("42");
people2.setCar("Toyota");

peopleList.add(people);
peopleList.add(people2);

这样您的 peopleList 将容纳 2 个对象。

【讨论】:

    【解决方案2】:

    您创建一个“人”对象并设置名称、年龄和汽车。 . .然后再次设置人物对象的姓名、年龄和汽车。您需要两个不同的 People 对象:

    People people1 = new People();
    People people2 = new People();
    
    //1st Person
    people1.setName("Tim");
    people1.setAge("22");
    people1.setCar("Ford");
    
    //Second Person
    people2.setName("Susan");
    people2.setAge("42");
    people2.setCar("Toyota");
    
    peopleList.add(people1);
    peopleList.add(people2);
    

    另外,您将参数传递给您的方法getInfo(String ppl),但不要使用它。那个参数是干什么用的?

    【讨论】:

      【解决方案3】:

      你真的只是忘记了一步。 让我们一步一步来:

      List<People> peopleList = new ArrayList<People>();
      

      你创建了你的空列表

      People people = new People();
      
      //1st Person
      people.setName("Tim");
      people.setAge("22");
      people.setCar("Ford");
      

      您创建了一个People 对象实例并在其上设置了一些值

      //Second Person
      people.setName("Susan");
      people.setAge("42");
      people.setCar("Toyota");
      

      在这里你不会创建一个新人,而是覆盖你的第一个人的价值观

      peopleList.add(people);
      

      最后,您将包含第二个人的价值观的第一个人添加到您的列表中。

      您必须为您的第二个人创建一个新的 People 实例,设置该实例的值并将其添加到列表中,就像您的第一个人一样。

      【讨论】:

      • 谢谢。如果我不知道会有多少人怎么办。换句话说,我不会设置我的值,而是从数据库中检索。这就是 DB 中的 ID 字段的来源吗?
      • 通常您会从数据库中获得某种形式的结果集。常见的方法是遍历该结果集,每次迭代访问一个人的结果,构建您的对象实例并将其添加到您的列表中。请记住在循环之外实例化列表,否则您将继续覆盖该列表;)
      【解决方案4】:
        private List<People> getInfo(String ppl) {
              List<People> peopleList = new ArrayList<People>();
              People people = new People();
      
              //1st Person
              people.setName("Tim");
              people.setAge("22");
              people.setCar("Ford");
      
              peopleList.add(people);
              People people = new People();
      
              //Second Person
              people.setName("Susan");
              people.setAge("42");
              people.setCar("Toyota");
      
              peopleList.add(people);
      
              return peopleList;
      

      你不是在创建另一个人对象并添加前一个对象,你只是在修改它。

      【讨论】:

        【解决方案5】:

        您在创建第二个人时重新定义了人员,因此仅将第二个人添加到列表中

        //1st Person
        people.setName("Tim");
        people.setAge("22");
        people.setCar("Ford");
        
        //Second Person
        people.setName("Susan");
        people.setAge("42");
        people.setCar("Toyota");
        
        peopleList.add(people);
        

        解决方法是创建多个人员对象或在定义人员后立即添加人员

        People people = new People();
        People people2 = new People();
        
        People.setName("Time");
        People2.setName("Susan");
        
        peopleList.add(people);
        peopleList.add(people2);
        

        还是后者

        people.setName("Tim");
        people.setAge("22");
        people.setCar("Ford");
        
        peopleList.add(people);
        
        people.setName("Susan");
        people.setAge("42");
        people.setCar("Toyota");
        
        peopleList.add(people);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-18
          • 2017-07-16
          • 1970-01-01
          • 1970-01-01
          • 2013-08-10
          • 1970-01-01
          相关资源
          最近更新 更多