使用流和lambda表达式替换嵌套的for循环以进入嵌套列表

问题描述 投票:0回答:1

你好,所以我有一个“列表照片”,我想从嵌套列表中获取值并放入“ List> grayPhoto”中,而我将其放入其中时,我需要在RBGpixels上使用我的方法.convertToGrayscale在第一个嵌套列表中。外部列表充满了我要读取的图片的行,因此这将使图片的像素成行和成列。

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 -> r.forEach(e-> row.add(e.convertToGrayscale())));

这是我的尝试,但由于我无法找到一种方法来使该行到达嵌套列表(例如,值的数量等于图片的大小),所以无法工作使用了for循环。

java list lambda stream nested
1个回答
0
投票

不是直接将for循环转换为forEach,而是在更高的抽象水平上查看for循环的作用。他们正在将列表中的每个元素转换为另一个元素。每当您看到这样的转换时,都应该调用map

List<List<GrayscalePixel>> grayscalePhoto = 
    photo.stream().map(x ->
        x.stream().map(RGBpixel::convertToGrayscale).collect(Collectors.toList())
    ).collect(Collectors.toList());
© www.soinside.com 2019 - 2024. All rights reserved.