Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据Java8中的匹配条件从2个不同的对象列表中创建对象列表_Java_Loops_Java 8_Nested_Java Stream - Fatal编程技术网

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

如何根据Java8中的匹配条件从2个不同的对象列表中创建对象列表,java,loops,java-8,nested,java-stream,Java,Loops,Java 8,Nested,Java Stream,如何使用Java8流编写下面的代码 我们有一个包含去年图书明细的列表和另一个包含今年图书明细的列表。我们需要合并两个列表来获得这本书的最终细节。本年度清单中的旧版图书需要与上一年度清单进行比较,以确定这些图书的价格。两个列表之间的匹配项是图书id。我们不想修改BookDetailsAsTyear列表和BookDetailsCorrentyear列表 public List<Books> determineLatestBookDetails(List<BookDetailsLas

如何使用Java8流编写下面的代码

我们有一个包含去年图书明细的列表和另一个包含今年图书明细的列表。我们需要合并两个列表来获得这本书的最终细节。本年度清单中的旧版图书需要与上一年度清单进行比较,以确定这些图书的价格。两个列表之间的匹配项是图书id。我们不想修改BookDetailsAsTyear列表和BookDetailsCorrentyear列表

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;
}
public List determinateTestBookDetails(List lastYearDetails,List currentYearDetails){
List booklist=newarraylist();
对于(BookDetailsLastYear bdly:lastYearDetails){
如果(bdly.getId()>15){
对于(书籍详细信息当前年份详细信息){
如果(!bdcy.getEdition().equals(“当前”)){
如果(bdly.getId()==bdcy.getId()){
书=新书();
book.setId(bdly.getId());
如果(bdly.getPrice()>=bdcy.getPrice()){
book.setPrice(bdly.getPrice());
}否则{
book.setPrice(bdcy.getPrice());
}
图书目录。添加(图书);
}
}
}
}
}
归还书目;
}

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

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());
final List books=lastYearDetails.stream()
.filter(bdly->bdly.getId()>15)
.map(bdly->new AbstractMap.simpleimutableentry(
bdly,
currentYearDetails.stream()
.filter(bdcy->!bdcy.getEdition().equals(“当前”))
.filter(bdcy->bdcy.getId()==bdly.getId())
.findFirst()
))
.filter(对->对.getValue().isPresent())
.map(配对->{
书=新书();
book.setId(pair.getKey().getId());
book.setPrice(Math.max(pair.getKey().getPrice(),pair.getValue().getPrice());
还书;
})
.collect(Collectors.toList());

你尝试了什么?你不应该用复数命名一个类,除非一个实例代表多个对象。@shmosel这对于非英语母语人士来说是很常见的事情。在我的项目中,人们写类似的东西,比如simular,交叉销售,交叉销售,变异轴,变异轴,你不能做任何事情…@哇,除了告诉人们你的意思之外。@Naresh,我认为你的代码逻辑有很大的缺陷,因为你需要检查今年的书是否有“最新的”在编辑字段中。@哇,感谢您的快速响应,代码运行良好。这里给出的用例不是我的实际用例,它与我正在研究的用例类似。所以真的没有考虑太多的逻辑。
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());