代码之家  ›  专栏  ›  技术社区  ›  user22553624

将基于实例编号的对象列表拆分为新的对象列表

  •  1
  • user22553624  · 技术社区  · 2 年前

    我有一个消息对象列表。我的消息对象由sender和CaseNumber组成。SQL查询将所有消息拉入列表。在这个列表中,我有多个相同的CaseNumber。
    我想完成的是循环浏览当前的消息列表,并根据CaseNumber将它们拆分为自己的单独列表。

    我一直在摸索,但我不确定如何在for循环中完成这项工作。

        public class Messages {
        private String sender = "";
        private int caseNumber = 0
    
         public int getCaseNumber() {
        return caseNumber;
    }
        public void setCaseNumber(int caseNumber) {
            this.caseNumber = caseNumber;
        }
    
        public String getSender() {
          return sender;
        }
        public void setSender(String sender) {
        this.sender = sender;
        }
        
       }
    
    SQL makes a call and maps the vars into a huge object.
      public List<Messages> getAllMessages()
      {
       List<Messages> entries = null;
       String sql = "select sender, caseNumber from Messages";
       entries = jdbcTemplate.query(sql, new MessagesMapper());
       return entries;
      }
    
    //for loop in my function.
    for(Messages m : allMessages)
    {
        //This is the part i am stumped on how to I check if case number = case number if so create a new Messages List. Then if any of the additional cases in the list, add them to this new List.  If it's a new caseNumber, create a new list.
    }
    

    我曾想过更改sql调用,只按caseNumber提取每条消息,但我觉得我可能只是在抨击sql,这感觉没有效率。

    希望这对我想要完成的事情有意义。根据caseNumber拆分对象列表,并创建自己的对象列表。

    3 回复  |  直到 2 年前
        1
  •  3
  •   Rifat Rubayatul Islam    2 年前

    您可以使用java流 api 以对列表进行分组。

    Map<Integer, List<Message>> groupedMessages = allMessages.stream().collect(Collectors.groupingBy(Message::getCaseNumber));
    
        2
  •  1
  •   Lajos Arpad    2 年前

    您可以创建 Map<Integer, List<String>> 像物体一样

    Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();
    

    在里面 for 循环,检查给定的数字是否存在于 map 如果没有,请创建它:

    if (!map.containsKey(caseNumber)) {
        map.put(caseNumber, new ArrayList<String>());
    }
    map.get(caseNumber).add(sender);
    
        3
  •  0
  •   Reilas    2 年前

    创建 Map ,其中 钥匙 caseNumber ,值为 List 属于 消息 对象。

    Map<Integer, List<Messages>> map = new TreeMap<>();
    for (Messages m : getAllMessages())
        if (map.containsKey(m.caseNumber)) map.get(m.caseNumber).add(m);
        else map.put(m.caseNumber, new ArrayList<>(List.of(m)));