java - Java 8 double for 循环流过滤器映射
问题描述
我的代码原样:
List<TestDto> dto = selectList();
List<TestDto2> dto2 = selectList2();
Map<String, Object> result = new HashMap<>();
for( TestDto d : dto )
{
for( TestDto2 d2 : dto2 )
{
if( (d1.getHeight() == d2.getHeight()) && (d1.getAge() == d2.getAge()) )
{
result.put( d2.getName() + "_H", d1.getHeight() );
result.put( d2.getName() + "_A", d1.getAge() );
}
}
}
成为:
?
/*
example) dto.stream().filter(dto2.stream(d2... -> d1.getHeight = d2.getHeight && d1.getAge == d2.getAge).map....result.put()...
*/
我想要 Java 8 Stream 代码。
谁能帮我?
使用我想从 for 循环流式传输的 Java 8 流,获取所有映射,所有过滤对象的列表。
解决方案
IMO,最好以您已经完成的方式完成。但是,如果您仍然想使用Stream
API,可以通过以下方式进行:
dto.stream().forEach(d1 -> dto2.stream().forEach(d2 -> {
if (d1.getHeight() == d2.getHeight() && d1.getAge() == d2.getAge()) {
result.put(d2.getName() + "_H", d1.getHeight());
result.put(d2.getName() + "_A", d1.getAge());
}
}));
事实上,您不需要使用dto.stream()
. 您可以简单地使用ArrayList#forEach
:
dto.forEach(d1 -> dto2.forEach(d2 -> {
if (d1.getHeight() == d2.getHeight() && d1.getAge() == d2.getAge()) {
result.put(d2.getName() + "_H", d1.getHeight());
result.put(d2.getName() + "_A", d1.getAge());
}
}));
推荐阅读
- java - 跳跃扫描仪输入不允许输入
- egit - STS 在拉取/获取最新更改时收到此信息无法锁定本地跟踪参考以进行更新
- docker - 无法启动 Docker 服务,因为控制进程退出并显示错误代码
- ios - 奖励用户点击横幅广告 - swift iOS
- javascript - 使用 react-audio-player 中的外部按钮播放 mp3
- html - 生产 React 网站无法正确呈现
- spring-boot - thymeleaf 2.5.6 版本中使用变量表达式的方法是什么
- authentication - ADFS 作为某些 IDP 的代理
- reactjs - 我的反应网站有问题。我想在点击特定产品时弹出描述页面。但我的改变反映在所有的卡片上
- flutter - 颤振冻结基类