美文网首页
日拱一卒:lambda 之 map 操作

日拱一卒:lambda 之 map 操作

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

1. Stream

public interface Stream<T> extends BaseStream<T, Stream<T>> {
    <R> Stream<R> map(Function<? super T, ? extends R> mapper);
    LongStream mapToLong(ToLongFunction<? super T> mapper);
    Stream<T> distinct();
}
public interface LongStream extends BaseStream<Long, LongStream> {
    Stream<Long> boxed();
}

前置:定一个List, 转为 Map

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

    Map<String, OrderDTO> orderMap = Optional.ofNullable(orders)
            .orElse(Collections.emptyList())
            .stream()
            .collect(Collectors.toMap(OrderDTO::getTradeId, Function.identity()));
    System.out.println(JSON.toJSONString(orderMap));
}

1.1 map(Function)

List<String> tradeIdsByList = Optional.ofNullable(orders)
        .orElse(Collections.emptyList())
        .stream()
        .map(OrderDTO::getTradeId)
        .collect(Collectors.toList());

1.2 mapToLong(ToLongFunction)

List<Long> tradeIdsByMap = Optional.ofNullable(orderMap.keySet())
        .orElse(Collections.emptySet())
        .stream()
        .mapToLong(Long::parseLong)
        .boxed()
        .distinct()
        .collect(Collectors.toList());

2. toMap()

2.1 toMap(Function keyMapper, Function valueMapper)

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

    /*
     * toMap(Function keyMapper, Function valueMapper)
     *  缺点:duplicate key elements, java.lang.IllegalStateException: Duplicate key
     *
     * Function.identity() <==> element -> element
     */
    Map<String, OrderDTO> orderMap = Optional.ofNullable(orders)
            .orElse(Collections.emptyList())
            .stream()
            .collect(Collectors.toMap(OrderDTO::getOrderCode, Function.identity()));
    
}

2.2 toMap(Function keyMapper, Function valueMapper, BinaryOperator<U> mergeFunction)

@Test
public void toMap2() {
    List<OrderDTO> orders = Stream.of(new OrderDTO("A001", "1001", 1),
                    new OrderDTO("A002", "1002", 1))
            .collect(Collectors.toList());
    orders.add(new OrderDTO("A002", "1003", 1));
    /*
     * toMap(Function keyMapper, Function valueMapper, BinaryOperator<U> mergeFunction)
     *
     * mergeFunction: The mergeFunction is a function that is called only if there are duplicate key elements present in our final Map
     *
     * e.g.
     *  (existing, replacement) -> existing
     *  (existing, replacement) -> replacement
     */
    Map<String, OrderDTO> orderMap = Optional.ofNullable(orders)
            .orElse(Collections.emptyList())
            .stream()
            .collect(Collectors.toMap(OrderDTO::getOrderCode, t -> t, (o, n) -> o));
    System.out.println(orderMap);
}

当有重复key时,抛异常

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

    // c: throwable
    Map<String, OrderDTO> orderMap = Optional.ofNullable(orders)
            .orElse(Collections.emptyList())
            .stream()
            .collect(Collectors.toMap(OrderDTO::getOrderCode, t -> t,
                    (o, n) -> {throw new IllegalStateException("Duplicate key");}));
    System.out.println(orderMap);
}

相关文章

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

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

  • 日拱一卒

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

  • 2017-10-11

    持之以恒,日拱一卒。

  • 2017-10-11

    持之以恒,日拱一卒。

  • 今晚,信仰

    如题,日拱一卒

  • 感觉要重新开始写作了

    按兴趣日拱一卒

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

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

  • 2021-04-25

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

  • 日拱一卒

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

  • 无题

    日拱一卒,功不唐捐。

网友评论

      本文标题:日拱一卒:lambda 之 map 操作

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