java - 如何避免在 java lambda 表达式中定义单个元素数组

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

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

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

最佳答案

您的方法似乎有点矫枉过正。请注意,使用

初始化数组
final PromoSlotSize[] slot = new PromoSlotSize[1];

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

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);

关于java - 如何避免在 java lambda 表达式中定义单个元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51766676/

相关文章:

java - 递归到迭代

java - 从 List<Foo> 到 Map<String, List<Foo>> : looking for a better implementation

java - 如何重用不同类中的方法

java - 第 N 个斐波那契与 Binet 的公式在 70 之后不准确

javascript - 如何在javascript中获取带有ID的选中复选框值

java - 从 void 方法返回数组

arrays - 多模式匹配算法

rest - 在 Wildfly 10.0 中,Java REST 线程永远处于 RUNNABLE 状态

java - 是否可以将函数作为枚举构造函数参数?

java - @Autowired 发现不明确的依赖关系并且仍然有效。如何?