我编写了代码段,该段从匹配某些条件的列表中获取单个元素。有什么办法可以用相同类型的对象替换单个元素数组?

final PromoSlotSize[] slot = new PromoSlotSize[1];
promoSlotSizeList.stream()
    .filter(promoSlotSize -> promoSlotSize.getOfferSet().equals(Constants.HVT_RATE_OFFER_SET))
    .findFirst()
    .ifPresent(p-> slot[0] =p);

最佳答案

您的方法似乎过于矫kill过正。请注意,使用初始化数组

final PromoSlotSize[] slot = new PromoSlotSize[1];


将第一个也是唯一的元素slot[0] = null bu设置为默认值。因此,您可以使用PromoSlotSize使Stream-API再次返回第一个找到的对象nullOptional::orElse

slot[0] = promoSlotSizeList.stream()
              .filter(i-> i.getOfferSet().equals(Constants.HVT_RATE_OFFER_SET))
              .findFirst()
              .orElse(null);




正如@YCF_L所说:您是否认识到Stream返回了一个可以直接使用而不是创建一个元素数组的对象?如果不需要将数组作为另一个方法/类的输入,请执行以下操作:

PromoSlotSize slot = promoSlotSizeList.stream()
          .filter(i-> i.getOfferSet().equals(Constants.HVT_RATE_OFFER_SET))
          .findFirst()
          .orElse(null);

09-28 06:14