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,用,分割前后用()包起來,并且每個(gè)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());
/**
 * 按照價(jià)格排序升序
 */
books().stream().sorted(comparable).collect(Collectors.toList()).forEach(System.out::println);
System.out.println("--------------分割---");

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

/**
 * 按照價(jià)格升序,價(jià)格一樣按照時(shí)間升序(由遠(yuǎn)到近)
 */
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='服務(wù)器', publishDay=2018-02-04}
Book{id='3', name='nginx', price=26.0, type='服務(wù)器', publishDay=2018-03-10}
Book{id='1', name='tomcat', price=36.0, type='服務(wù)器', 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='數(shù)據(jù)庫', publishDay=2018-05-09}
Book{id='6', name='oracle', price=66.0, type='數(shù)據(jù)庫', publishDay=2018-06-10}
Book{id='7', name='redis', price=66.0, type='數(shù)據(jù)庫', 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='算法導(dǎo)論', price=116.0, type='其他', publishDay=2018-02-16}
Book{id='13', name='mysql 5.7', price=116.0, type='數(shù)據(jù)庫', publishDay=2018-05-09}
--------------分割---
Book{id='12', name='算法導(dǎo)論', price=116.0, type='其他', publishDay=2018-02-16}
Book{id='13', name='mysql 5.7', price=116.0, type='數(shù)據(jù)庫', 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='數(shù)據(jù)庫', publishDay=2018-05-09}
Book{id='6', name='oracle', price=66.0, type='數(shù)據(jù)庫', publishDay=2018-06-10}
Book{id='7', name='redis', price=66.0, type='數(shù)據(jù)庫', publishDay=2018-02-11}
Book{id='1', name='tomcat', price=36.0, type='服務(wù)器', publishDay=2018-02-03}
Book{id='3', name='nginx', price=26.0, type='服務(wù)器', publishDay=2018-03-10}
Book{id='2', name='jetty', price=16.0, type='服務(wù)器', publishDay=2018-02-04}
--------------分割---
Book{id='2', name='jetty', price=16.0, type='服務(wù)器', publishDay=2018-02-04}
Book{id='3', name='nginx', price=26.0, type='服務(wù)器', publishDay=2018-03-10}
Book{id='1', name='tomcat', price=36.0, type='服務(wù)器', publishDay=2018-02-03}
Book{id='7', name='redis', price=66.0, type='數(shù)據(jù)庫', 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='數(shù)據(jù)庫', publishDay=2018-05-09}
Book{id='6', name='oracle', price=66.0, type='數(shù)據(jù)庫', 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='算法導(dǎo)論', price=116.0, type='其他', publishDay=2018-02-16}
Book{id='13', name='mysql 5.7', price=116.0, type='數(shù)據(jù)庫', publishDay=2018-05-09}
/**
 * list 轉(zhuǎn) 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='算法導(dǎo)論', price=116.0, type='其他', publishDay=2018-02-16}, 1=Book{id='1', name='tomcat', price=36.0, type='服務(wù)器', publishDay=2018-02-03}, 13=Book{id='13', name='mysql 5.7', price=116.0, type='數(shù)據(jù)庫', publishDay=2018-05-09}, 2=Book{id='2', name='jetty', price=16.0, type='服務(wù)器', publishDay=2018-02-04}, 3=Book{id='3', name='nginx', price=26.0, type='服務(wù)器', 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='數(shù)據(jù)庫', publishDay=2018-05-09}, 6=Book{id='6', name='oracle', price=66.0, type='數(shù)據(jù)庫', publishDay=2018-06-10}, 7=Book{id='7', name='redis', price=66.0, type='數(shù)據(jù)庫', 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}}
/**
 * 求所有書籍的價(jià)格平均數(shù)
 */
System.out.print("價(jià)格平均值===============");
Double aver = books().stream().collect(Collectors.averagingDouble(Book::getPrice));
System.out.println(aver);


System.out.print("價(jià)格最高的===============");
/**
 * 獲取價(jià)格最貴的書
 */
Book book = books().stream().max((book1, book2) -> Double.compare(book1.getPrice(), book2.getPrice())).get();
System.out.println(book);

System.out.print("價(jià)格最高的===============");
/**
 * 獲取價(jià)格最貴的書-上一種的簡略寫法
 */
book = books().stream().max(Comparator.comparing(Book::getPrice)).get();
System.out.println(book);

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

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

System.out.print("價(jià)格最低的===============");
/**
 * 價(jià)格最低的書籍-上一種的簡略寫法
 */
book = books().stream().min(Comparator.comparing(Book::getPrice)).get();
System.out.println(book);

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

System.out.print("價(jià)格最高,并且是最晚出版的===============");
/**
 * 獲取價(jià)格最高的書籍,并且是最晚出版的
 */
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("價(jià)格最高,并且是最早出版的===============");
/**
 * 獲取價(jià)格最高的書籍,并且是最早出版的
 */
book = books().stream().collect(Collectors.maxBy(comp.thenComparing((book1, book2) -> book1.getPublishDay().isAfter(book2.getPublishDay()) ? -1 : 1))).get();
System.out.println(book);

輸出

價(jià)格平均值===============72.15384615384616
價(jià)格最高的===============Book{id='12', name='算法導(dǎo)論', price=116.0, type='其他', publishDay=2018-02-16}
價(jià)格最高的===============Book{id='12', name='算法導(dǎo)論', price=116.0, type='其他', publishDay=2018-02-16}
價(jià)格最高的===============Book{id='12', name='算法導(dǎo)論', price=116.0, type='其他', publishDay=2018-02-16}
價(jià)格最低的===============Book{id='2', name='jetty', price=16.0, type='服務(wù)器', publishDay=2018-02-04}
價(jià)格最低的===============Book{id='2', name='jetty', price=16.0, type='服務(wù)器', publishDay=2018-02-04}
價(jià)格最低的===============Book{id='2', name='jetty', price=16.0, type='服務(wù)器', publishDay=2018-02-04}
價(jià)格最高,并且是最晚出版的===============Book{id='13', name='mysql 5.7', price=116.0, type='數(shù)據(jù)庫', publishDay=2018-05-09}
價(jià)格最高,并且是最早出版的===============Book{id='12', name='算法導(dǎo)論', 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("--------------分割---");

/**
 * 按類別統(tǒng)計(jì)
 */
System.out.println("按類別統(tǒng)計(jì)個(gè)數(shù):");
Map<String, Long> countMap = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.counting()));
System.out.println(countMap);
System.out.println("--------------分割---");

/**
 * 按類別統(tǒng)計(jì)價(jià)格的sum
 */
System.out.println("按類別統(tǒng)計(jì)價(jià)格的sum:");
Map<String, Double> sumMap = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.summingDouble(Book::getPrice)));
System.out.println(sumMap);
System.out.println("--------------分割---");

/**
 * 按類別統(tǒng)計(jì)價(jià)格平均數(shù)
 */
System.out.println("按類別統(tǒng)計(jì)價(jià)格平均數(shù):");
Map<String, Double> aveMap = books().stream().collect(Collectors.groupingBy(Book::getType, Collectors.averagingDouble(Book::getPrice)));
System.out.println(aveMap);
System.out.println("--------------分割---");
/**
 * 每個(gè)類別中價(jià)格最高的
 */
System.out.println("每個(gè)類別中價(jià)格最高的:");
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("--------------分割---");
/**
 * 每個(gè)類別中價(jià)格最高的
 */
System.out.println("每個(gè)類別中價(jià)格最低的:");
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("--------------分割---");
/**
 * 每個(gè)類別中最晚發(fā)布的
 */
System.out.println("每個(gè)類別中最晚發(fā)布的:");
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}]
服務(wù)器
[Book{id='1', name='tomcat', price=36.0, type='服務(wù)器', publishDay=2018-02-03}, Book{id='2', name='jetty', price=16.0, type='服務(wù)器', publishDay=2018-02-04}, Book{id='3', name='nginx', price=26.0, type='服務(wù)器', 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='算法導(dǎo)論', price=116.0, type='其他', publishDay=2018-02-16}]
數(shù)據(jù)庫
[Book{id='5', name='mysql', price=66.0, type='數(shù)據(jù)庫', publishDay=2018-05-09}, Book{id='6', name='oracle', price=66.0, type='數(shù)據(jù)庫', publishDay=2018-06-10}, Book{id='7', name='redis', price=66.0, type='數(shù)據(jù)庫', publishDay=2018-02-11}, Book{id='13', name='mysql 5.7', price=116.0, type='數(shù)據(jù)庫', publishDay=2018-05-09}]
--------------分割---
按類別統(tǒng)計(jì)個(gè)數(shù):
{編程語言=1, 服務(wù)器=3, 其他=5, 數(shù)據(jù)庫=4}
--------------分割---
按類別統(tǒng)計(jì)價(jià)格的sum:
{編程語言=66.0, 服務(wù)器=78.0, 其他=480.0, 數(shù)據(jù)庫=314.0}
--------------分割---
按類別統(tǒng)計(jì)價(jià)格平均數(shù):
{編程語言=66.0, 服務(wù)器=26.0, 其他=96.0, 數(shù)據(jù)庫=78.5}
--------------分割---
每個(gè)類別中價(jià)格最高的:
{編程語言=Optional[Book{id='4', name='python', price=66.0, type='編程語言', publishDay=2018-04-06}], 服務(wù)器=Optional[Book{id='1', name='tomcat', price=36.0, type='服務(wù)器', publishDay=2018-02-03}], 其他=Optional[Book{id='12', name='算法導(dǎo)論', price=116.0, type='其他', publishDay=2018-02-16}], 數(shù)據(jù)庫=Optional[Book{id='13', name='mysql 5.7', price=116.0, type='數(shù)據(jù)庫', publishDay=2018-05-09}]}
--------------分割---
每個(gè)類別中價(jià)格最低的:
{編程語言=Optional[Book{id='4', name='python', price=66.0, type='編程語言', publishDay=2018-04-06}], 服務(wù)器=Optional[Book{id='2', name='jetty', price=16.0, type='服務(wù)器', publishDay=2018-02-04}], 其他=Optional[Book{id='8', name='thymeleaf', price=76.0, type='其他', publishDay=2018-02-12}], 數(shù)據(jù)庫=Optional[Book{id='5', name='mysql', price=66.0, type='數(shù)據(jù)庫', publishDay=2018-05-09}]}
--------------分割---
每個(gè)類別中最晚發(fā)布的:
{編程語言=Optional[Book{id='4', name='python', price=66.0, type='編程語言', publishDay=2018-04-06}], 服務(wù)器=Optional[Book{id='3', name='nginx', price=26.0, type='服務(wù)器', publishDay=2018-03-10}], 其他=Optional[Book{id='12', name='算法導(dǎo)論', price=116.0, type='其他', publishDay=2018-02-16}], 數(shù)據(jù)庫=Optional[Book{id='6', name='oracle', price=66.0, type='數(shù)據(jù)庫', publishDay=2018-06-10}]}

/**
 * 過濾價(jià)格大于80的并且按照出版時(shí)間倒序,收集成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='數(shù)據(jù)庫', publishDay=2018-05-09}
Book{id='12', name='算法導(dǎo)論', 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}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末污尉,一起剝皮案震驚了整個(gè)濱河市饮醇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冗澈,老刑警劉巖馏颂,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件示血,死亡現(xiàn)場離奇詭異,居然都是意外死亡救拉,警方通過查閱死者的電腦和手機(jī)难审,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來亿絮,“玉大人告喊,你說我怎么就攤上這事∫嘉蓿” “怎么了葱绒?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斗锭。 經(jīng)常有香客問我,道長失球,這世上最難降的妖魔是什么岖是? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮实苞,結(jié)果婚禮上豺撑,老公的妹妹穿的比我還像新娘。我一直安慰自己黔牵,他們只是感情好聪轿,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著猾浦,像睡著了一般陆错。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上金赦,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天音瓷,我揣著相機(jī)與錄音,去河邊找鬼夹抗。 笑死绳慎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杏愤,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼靡砌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了珊楼?” 一聲冷哼從身側(cè)響起乏奥,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亥曹,沒想到半個(gè)月后邓了,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媳瞪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年骗炉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛇受。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡句葵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出兢仰,到底是詐尸還是另有隱情乍丈,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布把将,位于F島的核電站轻专,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏察蹲。R本人自食惡果不足惜请垛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洽议。 院中可真熱鬧宗收,春花似錦、人聲如沸亚兄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽审胚。三九已至匈勋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間菲盾,已是汗流浹背颓影。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留懒鉴,地道東北人诡挂。 一個(gè)月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓碎浇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親璃俗。 傳聞我的和親對象是個(gè)殘疾皇子奴璃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容