【问题标题】:Java Print ArrayList Groups with Group NameJava 打印带有组名的 ArrayList 组
【发布时间】:2020-01-16 23:39:46
【问题描述】:

我只是一个初学者,正在学习自己的 Java! 我只有一个用户对象的数组列表:

class Users{
   public userName;
   public userNumber;
}  

然后我创建一个模型:

 ArrayList<Users> model=new ArrayList<Users>();

并将模型项添加为:

 model.add(new Users("abc","123"));
 model.add(new Users("def","888"));
 model.add(new Users("abc","246"));
 model.add(new Users("def","999"));
 model.add(new Users("abc","456"));

我想要做的是以这种方式打印模型,该模型应该显示类似的分组数据,组名如下:

 for(int i=0;i:i<users.size;i++){
    System.out.printlin("users:::"+users.get(i).userNumber);
 }

但它也应该按名称分组和打印组:

 abc ->
       users:::123
       users:::246
       users:::456

 def ->
       users:::888
       users:::999  

所以我想对数据进行分组,然后以分组格式打印数据,每个组名也一样!

我该怎么做,我只是在自学 Java。提前致谢

【问题讨论】:

  • 你需要使用java.util.Map,这个数据结构包含键值对。您的键将是用户名,值将是用户编号列表。然后你可以有一个循环来打印地图中的条目。您还可以阅读有关 java8 流 api 的信息。一切顺利:)
  • 如果您只想要打印数据,那么您可以在用户类中使用 oveeride 方法 toString 。链接 (stackoverflow.com/questions/10734106/…)

标签: java android for-loop arraylist


【解决方案1】:

使用HashMap 是一种快速简便的方法来做你想做的事。哈希映射是键值集合,在您的情况下,您将创建一个HashMap&lt;String, List&lt;String&gt;&gt;,它将username 存储为键,并将userNumber 存储为值列表(因为您有多个值)。

那么你的代码会改变如下:

  1. 遍历您拥有的所有用户。
  2. 如果username 存在于哈希图中,请将usernumber 添加到其中。
  3. 如果username 不存在,请将其添加到哈希图中,并将usernumber 作为其列表的第一个元素。

最后,您将遍历 hashmap,打印它拥有的键和值。

【讨论】:

    【解决方案2】:

    使用 Java Streams 尝试以下类似操作。

    //group by user name
    Map<String, Set<String>> map =
                model.stream().collect(
                        Collectors.groupingBy(Users::getUserName,
                                Collectors.mapping(Users::getUserNumber, Collectors.toSet())
                        )
                );
    System.out.println(map);
    

    确保在 Users 类中实现了 getter 方法 getUserName()、getUserNumber()。这里我假设 userNameuserNumber 都是字符串类型的数据。

    【讨论】:

      【解决方案3】:
      public class User {
      private String userName;
      public String getUserName() {
          return userName;
      }
      
      public User(String userName, String userNumber) {
          this.userName = userName;
          this.userNumber = userNumber;
      }
      
      public void setUserName(String userName) {
          this.userName = userName;
      }
      
      public String getUserNumber() {
          return userNumber;
      }
      
      public void setUserNumber(String userPassword) {
          this.userNumber = userPassword;
      }
      
      private String userNumber;
      }
      

      主类

      import java.util.ArrayList;
      import java.util.HashMap;
      import java.util.List;
      public class MainMethod {
      
      private static HashMap<User, ArrayList<User>> maps;
      private static ArrayList<User> user1list;
      private static ArrayList<User> user2list;
      
      public static void main(String...args) {
          maps = new HashMap<>();
          user1list = new ArrayList<>();
          user2list = new ArrayList<>();
          User user1 = new User("Ram", "1234");
          User user2 = new User("Alish", "5678");
          User user3 = new User("Ram", "91011");
          User user4 = new User("Alish", "121314");
          user1list.add(user1);
          user1list.add(user3);
          user2list.add(user2);
          user2list.add(user4);
          maps.put(user1, user1list );
          maps.put(user2, user2list);
      
         /// User one lists
          for ( User userone: maps.get(user1)) {
              System.out.println("userone Name:::"+userone.getUserName());
              System.out.println("User one Number:::"+userone.getUserNumber());
          }
      
          System.out.println();
           // USer tow list
          for (User usertwo: maps.get(user2)) {
              System.out.println("User two Name:::" +usertwo.getUserName());
              System.out.println("User two Number :::" +usertwo.getUserNumber());
          }
        }
       }
      

      【讨论】:

        【解决方案4】:

        请尝试下面的代码 -

        public class Users {
        
        public String userName;
        public String userNumber;
        
        public Users(String userName, String userNumber) {
            this.userName = userName;
            this.userNumber = userNumber;
        }
        
        public String getUserName() {
            return userName;
        }
        
        public void setUserName(String userName) {
            this.userName = userName;
        }
        
        public String getUserNumber() {
            return userNumber;
        }
        
        public void setUserNumber(String userNumber) {
            this.userNumber = userNumber;
        }
        
        public static void main(String ar[]) {
        
            ArrayList<Users> model = new ArrayList<Users>();
            model.add(new Users("abc", "123"));
            model.add(new Users("def", "888"));
            model.add(new Users("abc", "246"));
            model.add(new Users("def", "999"));
            model.add(new Users("abc", "456"));
        
            Map<String, Set<String>> map = model.stream().collect(Collectors.groupingBy(Users::getUserName,
                    Collectors.mapping(Users::getUserNumber, Collectors.toSet())));
            for (Map.Entry<String, Set<String>> entry : map.entrySet()) {
                Set set = entry.getValue();
                Iterator value = set.iterator();
                while (value.hasNext()) {
                    System.out.println(entry.getKey() + " : " + value.next());
                }
            }
        
        }
        

        }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-03
          • 2016-10-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多