使用其他列表中的值修改列表中对象的最佳方法

时间:2018-04-02 15:41:50

标签: java list java-8

我有一个实体Issue如下:

public class Issue{
    private IssueElementEnum issueElement;
    private IssueTypeEnum issueType;
    private String title;
}

我有一个{DA}的Issue列表:

List<Issue> issues = issueDAO.findAll();

在此列表中,我有一些Issue对象issue.getIssueElement() == IssueElementEnum.USER,我想通过更改title字段来更新这些对象,因为我必须过滤{{1}的列表从结果列表中创建一个String类型列表,然后我必须将此列表传递给一个服务,该服务将返回一个新标题列表,用于替换旧标题。

这就是我的尝试:

issues

有没有其他方法可以写这个?

1 个答案:

答案 0 :(得分:1)

很难确切地了解这里发生的事情,但我发现有2项改进。

首先,userIssues根本没有意义(尽管在最后一步中你迭代所有issues而不是userIssues似乎很奇怪。这是对的吗?)。只是做

List<String> oldTitles = issues
                            .stream()
                            .filter(a -> a.getIssueElement() == IssueElementEnum.USER)
                            .map(Issue::getTitle)
                            .collect(Collectors.toList());

其次,嵌套循环似乎不必要。我不是100%清楚你的逻辑,但这样的事情应该有用。

Map<String, User> usersByKey = new HashMap<>();
for (User user : users)
    usersByKey.put(user.getKey(), user);
for (Issue issue : issues) {
    User user = usersByKey.get(issue.getTitle());
    if (user != null) 
        issue.setTitle(user.getFirstName() + " " + user.getLastName());
}