【问题标题】:Using streams and lambda expressions to replace a nested for loop to enter into a nested list使用流和 lambda 表达式替换嵌套的 for 循环以进入嵌套列表
【发布时间】:2019-12-07 13:12:51
【问题描述】:

你好,所以我有一个List<List<RGBpixel> photo,我想从这个嵌套列表中取出值并放入List<List<GrayscalePixel>> grayPhoto,而我将这些放入我需要在@987654324 上使用我的方法.convertToGrayscale @s 在第一个嵌套列表中。外部列表中填满了我要读取的图片行,因此这将生成图片像素的行和列。

for (int i = 0; i < photo.size(); i++) {                                                                             
   List<GrayscalePixel> row = new ArrayList<>();
   for (int j = 0; j < photo.get(0).size(); j++) {
      row.add(photo.get(i).get(j).convertToGrayscale());                        
   }
   grayPhoto.add(row);
}

我将如何转换它以便它使用流和 lambda

photo.forEach(r -&gt; r.forEach(e-&gt; row.add(e.convertToGrayscale())));

这是我的尝试,但它不起作用,因为我无法找到一种方法使其将行放入嵌套列表中,一旦它达到值的数量等于图片大小的点我确实使用了 for 循环。

【问题讨论】:

    标签: java list lambda nested java-stream


    【解决方案1】:

    不要直接将你的 for 循环翻译成forEach,而是看看你的 for 循环在更高的抽象层次上做了什么。他们正在将列表中的每个元素转换为另一个元素。每当您看到这样的转换时,您应该调用 map

    List<List<GrayscalePixel>> grayscalePhoto = 
        photo.stream().map(x ->
            x.stream().map(RGBpixel::convertToGrayscale).collect(Collectors.toList())
        ).collect(Collectors.toList());
    

    【讨论】:

    • @Naman 平面地图会生成一维列表,不是吗?
    猜你喜欢
    • 2018-08-16
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 2013-03-05
    • 1970-01-01
    相关资源
    最近更新 更多