Полагаю, вы хотите использовать какой-то функциональный стиль в своем приложении и удалить этот императивный стиль кода из стиля функционального кода?
Итак, если я правильно понял, вам следует выполнить некоторые дополнительные действия.Сначала вам нужно создать DTO (объект передачи данных) для прохождения через эту часть вашей логики.
String filePath = filePaths.get(i);
Mat mat = Imgcodecs.imread(filePath);
Вы создаете это DTO:
class FilePathDTO {
private final String filepath;
private final Mat mat;
private final Mat grey = new Mat();
private final boolean isNotLastFilepath;
public FilePathDTO(String filepath, Mat mat, boolean isLast) {
this.filepath = filepath;
this.mat = mat;
this.isNotLastFilepath = isLast;
}
public String getFilepath() {
return filepath;
}
public Mat getMat() {
return mat;
}
public Mat getGrey() {
return grey;
}
public boolean isNotLastFilepath() {
return isNotLastFilepath;
}
}
И затем код будетbe выглядит следующим образом:
filePaths.stream()
.map(filePath -> new FilePathDTO(filePath, Imgcodecs.imread(filePath), filePaths.indexOf(filePath) != filePaths.size() - 1))
.forEach(dto -> {
cvtColor(dto.getMat(), dto.getGrey(), 6);
if(dto.isNotLastFilepath) {
threshold(dto.getGrey(), dto.getGrey(), 150, 255, THRESH_TRUNC);
}
Imgcodecs.imwrite(dto.getFilepath(), dto.getGrey());
});
Но у вас есть побочный эффект, например
if(dto.isNotLastFilepath) {
threshold(dto.getGrey(), dto.getGrey(), 150, 255, THRESH_TRUNC);
}
И вы вообще не избавитесь от императивного стиля кода.Вы можете сделать свой код ближе к функционалу.