我有一个方法可以过滤包含枚举的列表
我
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();
//...
}