java - 如何在 Java lambda 中映射多个变量?

标签 java lambda java-8 java-stream option-type

<分区>

我有一个方法可以过滤包含枚举的列表 我

if (availableImageSizes.stream()
                       .filter(t -> t.getNameSuffix().equals("-xs"))
                       .findFirst().isPresent())
{
    int width = availableImageSizes.stream()
                       .filter(t -> t.getNameSuffix().equals("-xs"))
                       .findFirst().getWidth();

    int height = availableImageSizes.stream()
                       .filter(t -> t.getNameSuffix().equals("-xs"))
                       .findFirst().getHeight();
}

如您所见,我尝试根据其 NameSuffix 过滤列表,过滤后我想将该值的宽度和高度映射到一个变量。但是代码是错误的,即使它能工作,它也很难看。

我可以在一个 lambda 中映射多个变量吗?如果是这样,我该如何实现?

最佳答案

如果您需要将这些值作为方法返回值的一部分

如果有一个合理的默认值,我会这样做

Optional<ImageSize> xsImageSize = availableImageSizes.stream()
    .filter(t -> t.getNameSuffix().equals("-xs"))
    .findFirst();
int height = xsImageSize.map(ImageSize::getHeight).orElse(-1);
int width = xsImageSize.map(ImageSize::getWidth).orElse(-1);

或者,可以为 null 的整数

Integer height = xsImageSize.map(ImageSize::getHeight).orElse(null);
Integer width = xsImageSize.map(ImageSize::getWidth).orElse(null);

否则

Optional<ImageSize> xsImageSize = availableImageSizes.stream()
    .filter(t -> t.getNameSuffix().equals("-xs"))
    .findFirst();
if (xsImageSize.isPresent())
{
    int height = xsImageSize.get().getHeight();
    int width = xsImageSize.get().getWidth();
    //...
}

如果您不需要这些值来返回

availableImageSizes.stream()
    .filter(t -> t.getNameSuffix().equals("-xs"))
    .findFirst()
    .ifPresent(imageSize -> {
        int height = imageSize.getHeight();
        int width = imageSize.getWidth();
        //...
    });

availableImageSizes.stream()
    .filter(t -> t.getNameSuffix().equals("-xs"))
    .findFirst()
    .ifPresent(this::processXsImageSize);

//...
private void processXsImageSize(ImageSize imageSize) {
    int height = imageSize.getHeight();
    int width = imageSize.getWidth();
    //...
}

关于java - 如何在 Java lambda 中映射多个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65034312/

相关文章:

java - ffmpeg只录制6秒的视频

java - JAXB 解码以增加 pojo

java - Eclipse 和 LibGDX : Problems with playing music on exported jar?

java-8 - 该表达式的目标类型必须是自定义接口(interface)的函数式接口(interface)

java - 使用额外的细节增强对象

java - 简单的 Java 11 JavaFX 程序,从 JAR 文件运行时出错 (Windows)

c++ - 根据长度对集合 <string> 进行排序

lambda - Java 8 流按 3 个字段分组并按总和和计数聚合生成单行输出

c# - 对 Func<double, double> 对象数组求和

java - 迭代 org.json.JSONObject 的值以将不同的操作应用于 JSONObjects 或 JSONArrays