使用带有java流的唯一字段合并两个列表

问题描述 投票:0回答:0

首先,我知道数据库设置不正确,但我没有机会更改它。我将发送给公司的消息和回复消息保存在同一个表中。也就是说,如果一家公司已经回答了发送给它的问题,它就会通过firstMessageId 存储在我的数据库中。 firstMessage id 等于我表中的 id。以前500-1000条消息没有问题,现在40000条消息加上map.put、Collection.sort等,用方法打开消息框需要2分钟。我想我需要使用stream api来解决这个问题,但我无法生成必要的代码。我将返回到一个列表,在该列表中将有一个单独的回复消息列表。我还将使用 getID==getFirstMessageID 将它们链接起来。

MessageDTO.java:

    private int id;
    private int firstMessageID;
    private List<MessageDTO> answers = new ArrayList<MessageDTO>();

我的旧代码:

List<MessageDTO> list = null;
List<MessageDTO> messageList = new ArrayList<MessageDTO>();
Map<Integer, MessageDTO> messageMap = new HashMap<Integer, MessageDTO>();
try{
    list = MessageDTO.instance.getCompanyMessages(conn, User); // a JDBC connection
    for (MessageDTO messageDTO: list) {
        if(MessageDTO.getfirstMessageID() == 0){
            messageMap.put(MessageDTO.getId(), messageDTO);
        }else{
            MessageDTO tmp = messageMap.get(messageDTO.getfirstMessageID());
            tmp.getAnswers().add(messageDTO );
        }
    }
    
    for (Iterator<MessageDTO> iterator = messageMap.values().iterator(); iterator.hasNext();) {
        MessageDTO messageDTO = (MessageDTO ) iterator.next();
        Collections.sort(messageDTO.getAnswers());
        messageList.add(messageDTO);
    }
    Collections.sort(messageList);
} catch etc.
    return messageList;

谢谢大家

java dictionary stream flatmap groupingby
© www.soinside.com 2019 - 2024. All rights reserved.