Lambda 实战Demo

主要是LAMBDA的基本操作小栗子

博客地址(详解):http://www.pipima.top/

/**
 * @author mapp
 * @des 实战
 * @date 2019/3/7
 */
public class LambdaTest {

    /**
     * index.do?itemId=1&userId=10000&type=20&token=111111111111&key=index
     * 将查询参数转为map
     */
    @Test
    public void test1() {
        String queryString = "itemId=1&userId=10000&type=20&token=111111111111&key=index";
        Map<String, String> map = Stream.of(queryString.split("&")).map(x -> x.split("=")).collect(Collectors.toMap(x -> x[0], x -> x[1]));
        System.out.println(map);
    }

    @Test
    public void test2() {
        // 获取book集合所有id
        List<Integer> ids = books().stream().map(book -> book.getId()).collect(Collectors.toList());
        System.out.println(ids);

        ids = books().stream().map(Book::getId).collect(Collectors.toList());
        System.out.println(ids);

        //join 操作
        String str = books().stream().map(book -> book.getId() + "").collect(Collectors.joining(","));
        System.out.println(str);

        str = books().stream().map(book -> book.getId() + "").collect(Collectors.joining(",", "(", ")"));
        System.out.println(str);

        str = books().stream().map(book -> "'" + book.getId() + "'").collect(Collectors.joining(",", "(", ")"));
        System.out.println(str);
    }

    // 去重
    @Test
    public void test3() {
        List<String> list = books().stream().map(Book::getType).collect(Collectors.toList());
        System.out.println(list);

        list = books().stream().map(Book::getType).distinct().collect(Collectors.toList());
        System.out.println(list);

        Set<String> set = books().stream().map(Book::getType).collect(Collectors.toSet());
        System.out.println(list);
    }

    // 排序,比较器
    @Test
    public void test4() {
//        books().stream().sorted((x, y) -> Double.compare(x.getPrice(), y.getPrice())).forEach(System.out::println);

//        Comparator<Book> comparator = (x, y) -> Double.compare(x.getPrice(), y.getPrice());
//        books().stream().sorted(comparator.reversed()).forEach(System.out::println);

        //先按照价格排序,在按照时间排序
//        Comparator<Book> comparator = (x, y) -> Double.compare(x.getPrice(), y.getPrice());
//        books().stream().sorted(comparator.thenComparing((book1, boo2) -> book1.getPublishDate().isAfter(boo2.getPublishDate()) ? 1 : -1))
//                .forEach(System.out::println);

        // 简写
        books().stream().sorted(Comparator.comparing(Book::getPrice).thenComparing(Book::getPublishDate).reversed()).
                forEach(System.out::println);
    }

    // map
    @Test
    public void test5() {
        // list 转 map
//        Map<Integer, String> map = books().stream().collect(Collectors.toMap(book -> book.getId(), book -> book.getName()));
//        System.out.println(map);

        Map<Integer, Book> map = books().stream().collect(Collectors.toMap(Book::getId, book -> book));
        System.out.println(map);
    }

    // 平均值
    @Test
    public void test6() {
        double avg = books().stream().collect(Collectors.averagingDouble(Book::getPrice));
        System.out.println(avg);
    }

    // 最大,最小
    @Test
    public void test7() {
        Optional<Book> book = books().stream().collect(Collectors.minBy(Comparator.comparing(Book::getPrice)));
        System.out.println(book.get());

        book = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPrice)));
        System.out.println(book);

        book = books().stream().collect(Collectors.minBy(Comparator.comparing(Book::getPublishDate)));
        System.out.println(book);

        book = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPublishDate)));
        System.out.println(book);

        book = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPrice)
                .thenComparing(Book::getPublishDate)));
        System.out.println(book);
    }

    // 分组
    @Test
    public void test8() {
        // 按类型分组
        Map<String, List<Book>> books =  books().stream().collect(Collectors.groupingBy(Book::getType));
        // 遍历Map
        books.forEach((x, y) -> System.out.println("Key:" + x + "value:"+ y));
        // 按类型分组,然后统计每个类型的数量
        Map<String, Long> bookCount = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.counting()));
        System.out.println(bookCount);

        // 按类型分组,然后统计每个类型的总价
        Map<String, Double> bookSum = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.summingDouble(Book::getPrice)));
        System.out.println(bookSum);

        // 按类型分组,然后统计每个类型的平均价格
        Map<String, Double> bookAvg = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.averagingDouble(Book::getPrice)));
        System.out.println(bookAvg);

        // 按类型分组。然后统计每个类型中的最高价格
        Map<String, Optional<Book>> bookMax = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.maxBy(Comparator.comparing(Book::getPrice))));
        System.out.println(bookMax);

        // 按类型分组。然后统计每个类型中的最低价格
        Map<String, Optional<Book>> bookMin = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.minBy(Comparator.comparing(Book::getPrice))));
        System.out.println(bookMin);
        // 按类型分组。然后统计出价格最高的并且日期最大的
        Map<String, Optional<Book>> bookMaxDate = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.maxBy(Comparator.comparing(Book::getPrice).thenComparing(Book::getPublishDate))));
        System.out.println(bookMaxDate);
    }


    private List<Book> books(){
        List<Book> books = new ArrayList<>();
        books.add(new Book(1, "tomcat", 70d, "服务器", LocalDate.parse("2014-05-17")));
        books.add(new Book(2, "jetty", 60d, "服务器", LocalDate.parse("2015-12-01")));
        books.add(new Book(3, "nginx", 65d, "服务器", LocalDate.parse("2016-10-17")));
        books.add(new Book(4, "java", 66d, "编程语言", LocalDate.parse("2011-04-09")));
        books.add(new Book(5, "ruby", 80d, "编程语言", LocalDate.parse("2013-05-09")));
        books.add(new Book(6, "php", 40d, "编程语言", LocalDate.parse("2014-08-06")));
        books.add(new Book(7, "html", 44d, "编程语言", LocalDate.parse("2011-01-06")));
        books.add(new Book(8, "oracle", 150d, "数据库", LocalDate.parse("2013-08-09")));
        books.add(new Book(9, "mysql", 66d, "数据库", LocalDate.parse("2015-04-06")));
        books.add(new Book(10, "ssh", 70d, "编程语言", LocalDate.parse("2016-12-04")));
        books.add(new Book(11, "设计模式", 81d, "其他", LocalDate.parse("2017-04-06")));
        books.add(new Book(12, "重构", 62d, "其他", LocalDate.parse("2012-04-09")));
        books.add(new Book(13, "敏捷开发", 72d, "其他", LocalDate.parse("2016-09-07")));
        books.add(new Book(14, "从技术到管理", 81d, "其他", LocalDate.parse("2018-02-19")));
        books.add(new Book(15, "算法导论", 66d, "其他", LocalDate.parse("2010-05-08")));
        books.add(new Book(16, "oracle 12c", 150d, "数据库", LocalDate.parse("2017-05-08")));
        return books;
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值