熟練掌握J(rèn)ava8新特性之Stream API的全面應(yīng)用
1.寫在前面
關(guān)于Stream API的內(nèi)容,已經(jīng)基本上說完了。大家可以參考我的這兩篇文章:
深入理解Java8新特性之Stream API的創(chuàng)建方式和中間操作步驟、深入理解Java8新特性之Stream API的終止操作步驟
那么這篇文章主要就是說一個(gè)Stream API的簡單應(yīng)用練習(xí)題。
2.應(yīng)用舉例
首先,我們需要?jiǎng)?chuàng)建一個(gè)交易員類、交易類、存儲(chǔ)這兩個(gè)類對象的List集合。
package com.szh.java8.exer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 交易員類
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Trader {
private String name;
private String city;
}
package com.szh.java8.exer;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 交易類
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Transaction {
private Trader trader;
private int year;
private int value;
}
List<Transaction> transactions = Arrays.asList(
new Transaction(new Trader("Brian", "Cambridge"),2011,300),
new Transaction(new Trader("Raoul", "Cambridge"),2012,1000),
new Transaction(new Trader("Raoul", "Cambridge"),2011, 400),
new Transaction(new Trader("Mario", "Milan"),2012, 710),
new Transaction(new Trader("Mario", "Milan"),2012, 700),
new Transaction(new Trader("Alan", "Cambridge"),2012,950)
);
- 2.1 找出2011年發(fā)生的所有交易, 并按交易額排序(從低到高)
@Test
public void test1() {
transactions.stream()
.filter((t) -> t.getYear() == 2011)
.sorted((t1,t2) -> Integer.compare(t1.getValue(),t2.getValue()))
.forEach(System.out::println);
}

- 2.2 交易員都在哪些不同的城市工作過?
@Test
public void test2() {
transactions.stream()
.map((t) -> t.getTrader().getCity())
.distinct()
.forEach(System.out::println);
}

- 2.3 查找所有來自劍橋的交易員,并按姓名排序
@Test
public void test3() {
transactions.stream()
.filter((t) -> t.getTrader().getCity().equals("Cambridge"))
.map(Transaction::getTrader)
.sorted((t1,t2) -> t1.getName().compareTo(t2.getName()))
.distinct()
.forEach(System.out::println);
}

- 2.4 返回所有交易員的姓名字符串,按字母順序排序
@Test
public void test4() {
transactions.stream()
.map((t) -> t.getTrader().getName())
.sorted()
.forEach(System.out::println);
}
- 2.5 有沒有交易員是在米蘭工作的?
@Test
public void test5() {
boolean b = transactions.stream()
.anyMatch((t) -> t.getTrader().getCity().equals("Milan"));
System.out.println(b);
}

- 2.6 打印生活在劍橋的交易員的所有交易額
@Test
public void test6() {
Optional<Integer> sum = transactions.stream()
.filter((t) -> t.getTrader().getCity().equals("Cambridge"))
.map(Transaction::getValue)
.reduce(Integer::sum);
System.out.println(sum.get());
// Integer reduce = transactions.stream()
// .filter((t) -> t.getTrader().getCity().equals("Cambridge"))
// .map(Transaction::getValue)
// .reduce(0, (x, y) -> x + y);
// System.out.println(reduce);
}

- 2.7 所有交易中,最高的交易額是多少
@Test
public void test7() {
Optional<Integer> max = transactions.stream()
.map((t) -> t.getValue())
.max(Integer::compare);
System.out.println(max.get());
}

- 2.8 找到交易額最小的交易
@Test
public void test8() {
Optional<Transaction> min = transactions.stream()
.min((t1, t2) -> Integer.compare(t1.getValue(), t2.getValue()));
System.out.println(min.get());
}

以上就是熟練掌握J(rèn)ava8新特性之Stream API的全面應(yīng)用的詳細(xì)內(nèi)容,更多關(guān)于Java8 Stream API的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java 中橋接模式——對象結(jié)構(gòu)型模式的實(shí)例詳解
這篇文章主要介紹了Java 中橋接模式——對象結(jié)構(gòu)型模式的實(shí)例詳解的相關(guān)資料,希望通過本文大家能掌握這部分知識(shí),需要的朋友可以參考下2017-09-09
window?下?win10?jdk8安裝與環(huán)境變量的配置過程
這篇文章主要介紹了window?下?win10?jdk8安裝與環(huán)境變量的配置,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08
IntelliJ?IDEA的代碼擱置功能實(shí)現(xiàn)
本文主要介紹了IntelliJ?IDEA的代碼擱置功能實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
淺談MySQL中是如何實(shí)現(xiàn)事務(wù)提交和回滾的
本文主要介紹了MySQL中是如何實(shí)現(xiàn)事務(wù)提交和回滾的,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Spring Boot訪問靜態(tài)資源css/js,你真的懂了嗎
在搭建springboot時(shí)經(jīng)常需要在html中訪問一些靜態(tài)資源,很多朋友不清楚如何在 Spring Boot中訪問靜態(tài)資源,本文給大家?guī)韮煞N解決方案,感興趣的朋友跟隨小編一起看看吧2021-05-05
基礎(chǔ)不牢,地動(dòng)山搖,Java基礎(chǔ)速來刷刷
基礎(chǔ)不牢,地動(dòng)山搖,快來一起學(xué)習(xí)一下基礎(chǔ)吧,不斷地學(xué)習(xí)就算是基礎(chǔ)也會(huì)有新的認(rèn)知和收獲,加油2021-08-08

