美文网首页
日拱一卒:Lamdba 之查找和匹配

日拱一卒:Lamdba 之查找和匹配

作者: Tinyspot | 来源:发表于2023-10-15 09:56 被阅读0次

1. 查找元素

public interface Stream<T> extends BaseStream<T, Stream<T>> {
    Optional<T> findAny();
    Optional<T> findFirst();
}

1.1 findAny

@Test
public void findAny() {
    List<OrderDTO> orders = Stream.of(new OrderDTO("A001", "1001", 0),
                    new OrderDTO("A002", "1002", 1),
                    new OrderDTO("A003", "1003", 1))
            .collect(Collectors.toList());

    OrderDTO orderDTO = orders.stream()
            .filter(order -> order.getOrderStatus() == 1)
            .findAny()  // or .findFirst()
            .orElse(null);
}

抛异常方式

OrderDTO orderDTO1 = orders.stream()
        .filter(order -> order.getOrderStatus() == 1)
        .findAny()
        .orElseThrow(() -> new RuntimeException("No match found"));

2. match匹配

public interface Stream<T> extends BaseStream<T, Stream<T>> {
    boolean anyMatch(Predicate<? super T> predicate);
    boolean allMatch(Predicate<? super T> predicate);
    boolean noneMatch(Predicate<? super T> predicate);
}

2.1 checkNull

@Test
public void checkNull() {

    List<OrderItemDTO> orderItems = Stream.of(new OrderItemDTO()).collect(Collectors.toList());
    
    // 判断 goodsId 是否为空
    boolean anyMatch = Optional.ofNullable(orderItems)
            .orElse(Collections.emptyList())
            .stream()
            .map(OrderItemDTO::getGoodsId)
            .anyMatch(StringUtils::isEmpty);
    // StringUtils::isEmpty 等价:str -> StringUtils.isEmpty(str)

    // 判断 OrderItemDTO 是否为Null
    boolean anyMatch1 = Optional.ofNullable(orderItems)
            .orElse(Collections.emptyList())
            .stream()
            .anyMatch(Objects::isNull);
}

2.2 anyMatch

@Test
public void anyMatch() {
    List<OrderDTO> orders = Stream.of(new OrderDTO("A001", "1001", 0),
                    new OrderDTO("A002", "1002", 1),
                    new OrderDTO("A003", "1003", 1))
            .collect(Collectors.toList());

    boolean present = orders.stream()
            .filter(order -> order.getOrderStatus() == 1)
            .findAny()
            .isPresent();
    // 等价
    boolean anyMatch = orders.stream().anyMatch(orderDTO -> orderDTO.getOrderStatus() == 1);

    boolean allMatch = orders.stream().allMatch(orderDTO -> orderDTO.getOrderStatus() == 1);

    boolean noneMatch = orders.stream().noneMatch(orderDTO -> orderDTO.getOrderStatus() == 1);
}

相关文章

  • 日拱一卒英语社群复盘ing

    相 信 我,你 并 不 孤 独。 日拱一卒启动仪式1-4合集 日拱一卒”英语社群入群作业 日拱一卒启动仪式1-4合...

  • 日拱一卒

    日拱一卒是一个成语,完整的表述是:日拱一卒,功不唐捐。源于《法华经》 :“日拱一卒无尽有,功不唐捐终入海”。 会下...

  • 2017-10-11

    持之以恒,日拱一卒。

  • 2017-10-11

    持之以恒,日拱一卒。

  • 今晚,信仰

    如题,日拱一卒

  • 感觉要重新开始写作了

    按兴趣日拱一卒

  • 坚持还是放弃?取舍之间彰显大智慧。

    今天看到一段话,感觉写的更好,分享给大家。“日拱一卒”源于《法华经》:日拱一卒,功不唐捐——日拱一卒无有尽,功不唐...

  • 2021-04-25

    冰冻三尺,非一日之寒。 日拱一卒,功不唐捐。

  • 日拱一卒

    日拱一卒 任务0(12月11日) 最近刚加入这个“日拱一卒”的社群,名字非常好,学英文就...

  • 无题

    日拱一卒,功不唐捐。

网友评论

      本文标题:日拱一卒:Lamdba 之查找和匹配

      本文链接:https://www.haomeiwen.com/subject/ovdtidtx.html