首页 > 解决方案 > 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 流,获取所有映射,所有过滤对象的列表。

标签: javadictionaryjava-8java-stream

解决方案


IMO,最好以您已经完成的方式完成。但是,如果您仍然想使用StreamAPI,可以通过以下方式进行:

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());
    }
}));

推荐阅读