lambda例子


/**
 * 输出list所有元素
 */
books().stream().map(Book::getId).collect(Collectors.toList()).forEach(System.out::println);
System.out.println("--------------分割---");
/**
 * 获取拼接id,用,分割前后用()包起来
 */
String str = books().stream().map(Book::getId).collect(Collectors.joining(",", "(", ")"));
System.out.println(str);
System.out.println("--------------分割---");
/**
 * 获取所有id,用,分割前后用()包起来,并且每个id左右加单引号
 */
String str1 = books().stream().map(book -> "'" + book.getId() + "'").collect(Collectors.joining(",", "(", ")"));
System.out.println(str1);

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
--------------分割---
(1,2,3,4,5,6,7,8,9,10,11,12,13)
--------------分割---
('1','2','3','4','5','6','7','8','9','10','11','12','13')
/**
 * 排序
 */
Comparator<Book> comparable = (book1, book2) -> Double.compare(book1.getPrice(), book2.getPrice());
/**
 * 按照价格排序升序
 */
books().stream().sorted(comparable).collect(Collectors.toList()).forEach(System.out::println);
System.out.println("--------------分割---");

/**
 * 按照价格排序降序
 */
books().stream().sorted(comparable.reversed()).collect(Collectors.toList()).forEach(System.out::println);
System.out.println("--------------分割---");

/**
 * 按照价格升序,价格一样按照时间升序(由远到近)
 */
Comparator<Book> comparable2 = (book1, book2) -> Double.compare(book1.getPrice(), book2.getPrice());
books().stream().sorted(comparable2.thenComparing((book1, book2) -> book1.getPublishDay().isAfter(book2.getPublishDay()) ? 1 : -1)).forEach(System.out::println);

输出

Book{id='2', name='jetty', price=16.0, type='服务器', publishDay=2018-02-04}
Book{id='3', name='nginx', price=26.0, type='服务器', publishDay=2018-03-10}
Book{id='1', name='tomcat', price=36.0, type='服务器', publishDay=2018-02-03}
Book{id='4', name='python', price=66.0, type='编程语言', publishDay=2018-04-06}
Book{id='5', name='mysql', price=66.0, type='数据库', publishDay=2018-05-09}
Book{id='6', name='oracle', price=66.0, type='数据库', publishDay=2018-06-10}
Book{id='7', name='redis', price=66.0, type='数据库', publishDay=2018-02-11}
Book{id='8', name='thymeleaf', price=76.0, type='其他', publishDay=2018-02-12}
Book{id='9', name='http', price=86.0, type='其他', publishDay=2018-02-13}
Book{id='10', name='toc', price=96.0, type='其他', publishDay=2018-02-14}
Book{id='11', name='php', price=106.0, type='其他', publishDay=2018-02-15}
Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}
Book{id='13', name='mysql 5.7', price=116.0, type='数据库', publishDay=2018-05-09}
--------------分割---
Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}
Book{id='13', name='mysql 5.7', price=116.0, type='数据库', publishDay=2018-05-09}
Book{id='11', name='php', price=106.0, type='其他', publishDay=2018-02-15}
Book{id='10', name='toc', price=96.0, type='其他', publishDay=2018-02-14}
Book{id='9', name='http', price=86.0, type='其他', publishDay=2018-02-13}
Book{id='8', name='thymeleaf', price=76.0, type='其他', publishDay=2018-02-12}
Book{id='4', name='python', price=66.0, type='编程语言', publishDay=2018-04-06}
Book{id='5', name='mysql', price=66.0, type='数据库', publishDay=2018-05-09}
Book{id='6', name='oracle', price=66.0, type='数据库', publishDay=2018-06-10}
Book{id='7', name='redis', price=66.0, type='数据库', publishDay=2018-02-11}
Book{id='1', name='tomcat', price=36.0, type='服务器', publishDay=2018-02-03}
Book{id='3', name='nginx', price=26.0, type='服务器', publishDay=2018-03-10}
Book{id='2', name='jetty', price=16.0, type='服务器', publishDay=2018-02-04}
--------------分割---
Book{id='2', name='jetty', price=16.0, type='服务器', publishDay=2018-02-04}
Book{id='3', name='nginx', price=26.0, type='服务器', publishDay=2018-03-10}
Book{id='1', name='tomcat', price=36.0, type='服务器', publishDay=2018-02-03}
Book{id='7', name='redis', price=66.0, type='数据库', publishDay=2018-02-11}
Book{id='4', name='python', price=66.0, type='编程语言', publishDay=2018-04-06}
Book{id='5', name='mysql', price=66.0, type='数据库', publishDay=2018-05-09}
Book{id='6', name='oracle', price=66.0, type='数据库', publishDay=2018-06-10}
Book{id='8', name='thymeleaf', price=76.0, type='其他', publishDay=2018-02-12}
Book{id='9', name='http', price=86.0, type='其他', publishDay=2018-02-13}
Book{id='10', name='toc', price=96.0, type='其他', publishDay=2018-02-14}
Book{id='11', name='php', price=106.0, type='其他', publishDay=2018-02-15}
Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}
Book{id='13', name='mysql 5.7', price=116.0, type='数据库', publishDay=2018-05-09}
/**
 * list 转 map 用id做key
 */
Map<String, Book> bookMap = books().stream().collect(Collectors.toMap(Book::getId, book -> book));
System.out.println(bookMap);

输出

{11=Book{id='11', name='php', price=106.0, type='其他', publishDay=2018-02-15}, 12=Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}, 1=Book{id='1', name='tomcat', price=36.0, type='服务器', publishDay=2018-02-03}, 13=Book{id='13', name='mysql 5.7', price=116.0, type='数据库', publishDay=2018-05-09}, 2=Book{id='2', name='jetty', price=16.0, type='服务器', publishDay=2018-02-04}, 3=Book{id='3', name='nginx', price=26.0, type='服务器', publishDay=2018-03-10}, 4=Book{id='4', name='python', price=66.0, type='编程语言', publishDay=2018-04-06}, 5=Book{id='5', name='mysql', price=66.0, type='数据库', publishDay=2018-05-09}, 6=Book{id='6', name='oracle', price=66.0, type='数据库', publishDay=2018-06-10}, 7=Book{id='7', name='redis', price=66.0, type='数据库', publishDay=2018-02-11}, 8=Book{id='8', name='thymeleaf', price=76.0, type='其他', publishDay=2018-02-12}, 9=Book{id='9', name='http', price=86.0, type='其他', publishDay=2018-02-13}, 10=Book{id='10', name='toc', price=96.0, type='其他', publishDay=2018-02-14}}
/**
 * 求所有书籍的价格平均数
 */
System.out.print("价格平均值===============");
Double aver = books().stream().collect(Collectors.averagingDouble(Book::getPrice));
System.out.println(aver);


System.out.print("价格最高的===============");
/**
 * 获取价格最贵的书
 */
Book book = books().stream().max((book1, book2) -> Double.compare(book1.getPrice(), book2.getPrice())).get();
System.out.println(book);

System.out.print("价格最高的===============");
/**
 * 获取价格最贵的书-上一种的简略写法
 */
book = books().stream().max(Comparator.comparing(Book::getPrice)).get();
System.out.println(book);

System.out.print("价格最高的===============");
/**
 * 使用收集器获取价格最大的书籍
 */
book = books().stream().collect(Collectors.maxBy(Comparator.comparing(Book::getPrice))).get();
System.out.println(book);

System.out.print("价格最低的===============");
/**
 * 价格最低的书籍
 */
book = books().stream().min((book1, book2) -> Double.compare(book1.getPrice(), book2.getPrice())).get();
System.out.println(book);

System.out.print("价格最低的===============");
/**
 * 价格最低的书籍-上一种的简略写法
 */
book = books().stream().min(Comparator.comparing(Book::getPrice)).get();
System.out.println(book);

System.out.print("价格最低的===============");
/**
 * 使用收集器获取价格最低的书籍
 */
book = books().stream().collect(Collectors.minBy(Comparator.comparing(Book::getPrice))).get();
System.out.println(book);

System.out.print("价格最高,并且是最晚出版的===============");
/**
 * 获取价格最高的书籍,并且是最晚出版的
 */
Comparator<Book> comp = Comparator.comparing(Book::getPrice);
book = books().stream().collect(Collectors.maxBy(comp.thenComparing(Book::getPublishDay))).get();
System.out.println(book);

System.out.print("价格最高,并且是最早出版的===============");
/**
 * 获取价格最高的书籍,并且是最早出版的
 */
book = books().stream().collect(Collectors.maxBy(comp.thenComparing((book1, book2) -> book1.getPublishDay().isAfter(book2.getPublishDay()) ? -1 : 1))).get();
System.out.println(book);

输出

价格平均值===============72.15384615384616
价格最高的===============Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}
价格最高的===============Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}
价格最高的===============Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}
价格最低的===============Book{id='2', name='jetty', price=16.0, type='服务器', publishDay=2018-02-04}
价格最低的===============Book{id='2', name='jetty', price=16.0, type='服务器', publishDay=2018-02-04}
价格最低的===============Book{id='2', name='jetty', price=16.0, type='服务器', publishDay=2018-02-04}
价格最高,并且是最晚出版的===============Book{id='13', name='mysql 5.7', price=116.0, type='数据库', publishDay=2018-05-09}
价格最高,并且是最早出版的===============Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}
/**
 * 按类别分组收集
 */
System.out.println("按类别分组:");
Map<String, List<Book>> map = books().stream().collect(Collectors.groupingBy(Book::getType));
map.keySet().forEach(key -> {
    System.out.println(key);
    System.out.println(map.get(key));
});
System.out.println("--------------分割---");

/**
 * 按类别统计
 */
System.out.println("按类别统计个数:");
Map<String, Long> countMap = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.counting()));
System.out.println(countMap);
System.out.println("--------------分割---");

/**
 * 按类别统计价格的sum
 */
System.out.println("按类别统计价格的sum:");
Map<String, Double> sumMap = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.summingDouble(Book::getPrice)));
System.out.println(sumMap);
System.out.println("--------------分割---");

/**
 * 按类别统计价格平均数
 */
System.out.println("按类别统计价格平均数:");
Map<String, Double> aveMap = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.averagingDouble(Book::getPrice)));
System.out.println(aveMap);
System.out.println("--------------分割---");
/**
 * 每个类别中价格最高的
 */
System.out.println("每个类别中价格最高的:");
Map<String, Optional<Book>> maxMap = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.maxBy(Comparator.comparing(Book::getPrice))));
System.out.println(maxMap);
System.out.println("--------------分割---");
/**
 * 每个类别中价格最高的
 */
System.out.println("每个类别中价格最低的:");
Map<String, Optional<Book>> minMap = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.minBy(Comparator.comparing(Book::getPrice))));
System.out.println(minMap);
System.out.println("--------------分割---");
/**
 * 每个类别中最晚发布的
 */
System.out.println("每个类别中最晚发布的:");
Map<String, Optional<Book>> maxPublishMap = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.maxBy(Comparator.comparing(Book::getPublishDay))));
System.out.println(maxPublishMap);

输出

按类别分组:
编程语言
[Book{id='4', name='python', price=66.0, type='编程语言', publishDay=2018-04-06}]
服务器
[Book{id='1', name='tomcat', price=36.0, type='服务器', publishDay=2018-02-03}, Book{id='2', name='jetty', price=16.0, type='服务器', publishDay=2018-02-04}, Book{id='3', name='nginx', price=26.0, type='服务器', publishDay=2018-03-10}]
其他
[Book{id='8', name='thymeleaf', price=76.0, type='其他', publishDay=2018-02-12}, Book{id='9', name='http', price=86.0, type='其他', publishDay=2018-02-13}, Book{id='10', name='toc', price=96.0, type='其他', publishDay=2018-02-14}, Book{id='11', name='php', price=106.0, type='其他', publishDay=2018-02-15}, Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}]
数据库
[Book{id='5', name='mysql', price=66.0, type='数据库', publishDay=2018-05-09}, Book{id='6', name='oracle', price=66.0, type='数据库', publishDay=2018-06-10}, Book{id='7', name='redis', price=66.0, type='数据库', publishDay=2018-02-11}, Book{id='13', name='mysql 5.7', price=116.0, type='数据库', publishDay=2018-05-09}]
--------------分割---
按类别统计个数:
{编程语言=1, 服务器=3, 其他=5, 数据库=4}
--------------分割---
按类别统计价格的sum:
{编程语言=66.0, 服务器=78.0, 其他=480.0, 数据库=314.0}
--------------分割---
按类别统计价格平均数:
{编程语言=66.0, 服务器=26.0, 其他=96.0, 数据库=78.5}
--------------分割---
每个类别中价格最高的:
{编程语言=Optional[Book{id='4', name='python', price=66.0, type='编程语言', publishDay=2018-04-06}], 服务器=Optional[Book{id='1', name='tomcat', price=36.0, type='服务器', publishDay=2018-02-03}], 其他=Optional[Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}], 数据库=Optional[Book{id='13', name='mysql 5.7', price=116.0, type='数据库', publishDay=2018-05-09}]}
--------------分割---
每个类别中价格最低的:
{编程语言=Optional[Book{id='4', name='python', price=66.0, type='编程语言', publishDay=2018-04-06}], 服务器=Optional[Book{id='2', name='jetty', price=16.0, type='服务器', publishDay=2018-02-04}], 其他=Optional[Book{id='8', name='thymeleaf', price=76.0, type='其他', publishDay=2018-02-12}], 数据库=Optional[Book{id='5', name='mysql', price=66.0, type='数据库', publishDay=2018-05-09}]}
--------------分割---
每个类别中最晚发布的:
{编程语言=Optional[Book{id='4', name='python', price=66.0, type='编程语言', publishDay=2018-04-06}], 服务器=Optional[Book{id='3', name='nginx', price=26.0, type='服务器', publishDay=2018-03-10}], 其他=Optional[Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}], 数据库=Optional[Book{id='6', name='oracle', price=66.0, type='数据库', publishDay=2018-06-10}]}

/**
 * 过滤价格大于80的并且按照出版时间倒序,收集成list--这里直接输出
 */
books().stream().filter(book -> book.getPrice() > 80d).sorted(Comparator.comparing(Book::getPublishDay).reversed()).collect(Collectors.toList()).forEach(System.out::println);

输出

Book{id='13', name='mysql 5.7', price=116.0, type='数据库', publishDay=2018-05-09}
Book{id='12', name='算法导论', price=116.0, type='其他', publishDay=2018-02-16}
Book{id='11', name='php', price=106.0, type='其他', publishDay=2018-02-15}
Book{id='10', name='toc', price=96.0, type='其他', publishDay=2018-02-14}
Book{id='9', name='http', price=86.0, type='其他', publishDay=2018-02-13}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容