首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在java 8中根据匹配条件从2个不同的对象列表中创建对象列表

如何在java 8中根据匹配条件从2个不同的对象列表中创建对象列表
EN

Stack Overflow用户
提问于 2018-07-26 04:58:02
回答 2查看 82关注 0票数 1

如何使用java 8 streams编写下面的代码。

我们有一个包含去年图书详细信息的列表和另一个包含本年度图书详细信息的列表。我们需要合并两个列表才能得到书的最终细节。本年度列表中的旧版图书需要与上一年度列表进行比较,以确定这些图书的价格。两个列表之间的匹配crietria是图书id。并且我们不应该修改BookDetailsLastYear列表和BookDetailsCurrentYear列表。

public List<Books> determineLatestBookDetails(List<BookDetailsLastYear> lastYearDetails, List<BookDetailsCurrentYear> currentYearDetails) {

    List<Books> booklist = new ArrayList<>();
    for(BookDetailsLastYear bdly: lastYearDetails) {
        if(bdly.getId() > 15) {
            for(BookDetailsCurrentYear bdcy: currentYearDetails) {
                if(!bdcy.getEdition().equals("current")) {
                    if(bdly.getId() == bdcy.getId()) {
                        Books book = new Books();
                        book.setId(bdly.getId());

                        if(bdly.getPrice() >= bdcy.getPrice()) {
                            book.setPrice(bdly.getPrice());
                        } else {
                            book.setPrice(bdcy.getPrice());
                        }
                        booklist.add(book);
                    }
                }
            }
        }
    }
   return booklist;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-26 05:09:58

我不能保证你的代码的正确性,因为你没有包含太多的上下文,但这应该是一个准确的等价物:

return lastYearDetails.stream()
        .filter(bdly -> bdly.getId() > 15)
        .flatMap(bdly -> currentYearDetails.stream()
                .filter(bdcy -> !bdcy.getEdition().equals("current"))
                .filter(bdcy -> bdcy.getId() == bdly.getId())
                .map(bdcy -> {
                    Books book = new Books();
                    book.setId(bdly.getId());
                    book.setPrice(Math.max(bdly.getPrice(), bdcy.getPrice()));
                    return book;
                }))
        .collect(Collectors.toList());
票数 2
EN

Stack Overflow用户

发布于 2018-07-26 18:42:21

final List<Books> books = lastYearDetails.stream()
    .filter(bdly -> bdly.getId() > 15)
    .map(bdly -> new AbstractMap.SimpleImmutableEntry<>(
        bdly,
        currentYearDetails.stream()
            .filter(bdcy -> !bdcy.getEdition().equals("current"))
            .filter(bdcy -> bdcy.getId() == bdly.getId())
            .findFirst()
    ))
    .filter(pair -> pair.getValue().isPresent())
    .map(pair -> {
            Books book = new Books();
            book.setId(pair.getKey().getId());
            book.setPrice(Math.max(pair.getKey().getPrice(), pair.getValue().getPrice()));
            return book;
    })
    .collect(Collectors.toList());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51527543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档