關於Stream流的一些操作用法(案例)
阿新 • • 發佈:2020-12-26
package experencetext;
import java.util.*;
import java.util.stream.Collectors;
/**
- @version 1.0
- @Description TODO
- @Author scar
- @Date 2020/12/18 15:30
- (1) 找出2011年發生的所有交易,並按交易額排序(從低到高)。
- (2) 交易員都在哪些不同的城市工作過?
- (3) 查詢所有來自於劍橋的交易員,並按姓名排序。
- (4) 返回所有交易員的姓名字串,按字母順序排序。
- (5) 有沒有交易員是在米蘭工作的?
- (6) 列印生活在劍橋的交易員的所有交易額。
- (7) 所有交易中,最高的交易額是多少?
- (8) 找到交易額最小的交易。
*/
public class TTest { public static void main(String[] args) { Trader raoul = new Trader("Raoul", "Cambridge"); Trader mario = new Trader("Mario", "Milan"); Trader alan = new Trader("Alan", "Cambridge"); Trader brian = new Trader("Brian", "Cambridge"); List<Transaction> transactions = Arrays.asList( new Transaction(brian, 2011, 300), new Transaction(raoul, 2012, 1000), new Transaction(raoul, 2011, 400), new Transaction(mario, 2012, 710), new Transaction(mario, 2012, 700), new Transaction(alan, 2012, 950) ); Optional<Transaction> max = transactions.stream().max(Comparator.comparing(s -> s.getValue())); System.out.println(max.map(s->s.getYear())); //-----.limit(int)返回一個流,為元流的前()個元素 List<Transaction> collect4 = transactions.stream().limit(2).collect(Collectors.toList()); for (Transaction coll : collect4) { System.out.println("limit-->"+coll); } //(1) 找出2011年發生的所有交易,並按交易額排序(從低到高)----------------------------------- List<Transaction> collect5= transactions.stream().filter(s -> s.getYear() == 2011).sorted(Comparator.comparing(Transaction::getValue)).collect(Collectors.toList()); for (Transaction transaction : collect5) { System.out.println(transaction); } System.out.println("-----------------1--------------------------------------------------"); //2.交易員都在哪些不同的城市工作過-------------------- Set<String> collect1 = transactions.stream().map(s -> s.getTrader().getCity()).collect(Collectors.toSet()); for (String s : collect1) { System.out.println("城市:"+s); } System.out.println("-----------------2----------------------"); //3.查詢所有來自於劍橋的交易員,並按姓名排序---------------------------------------- List<Transaction> collect2 = transactions.stream().filter(x -> x.getTrader().getCity() == "Cambridge").sorted(Comparator.comparing(t -> t.getTrader().getName())).collect(Collectors.toList()); for (Transaction transaction : collect2) { System.out.println(transaction); } System.out.println("--------------------3--------------------"); //(4) 返回所有交易員的姓名字串,按字母順序排序- String reduce = transactions.stream().map(s -> s.getTrader().getName()).sorted().reduce("", (n1, n2) -> n1 + n2); System.out.println(reduce); System.out.println("------------------4----------------------"); // (5) 有沒有交易員是在米蘭工作的?---------------- transactions.stream().filter(s->s.getTrader().getCity()=="Milan").forEach(s-> System.out.println(s.getTrader().getName())); System.out.println("-----------------5------------------------------------------"); //(6) 列印生活在劍橋的交易員的所有交易額。--------------- transactions.stream().filter(x->x.getTrader().getCity()=="Cambridge").map(Transaction::getValue).forEach(System.out::println); System.out.println("------------------6-----------------------------------------"); //7.所有交易中,最高的交易額是多少---------------------- Optional<Integer> reduce2 = transactions.stream().map(Transaction::getValue).reduce(Integer::max); System.out.println(reduce); System.out.println(reduce2.get()); System.out.println("----------------7-------------------------------------------"); // (8) 找到交易額最小的交易------------------------------ Optional<Transaction> min = transactions.stream().min(Comparator.comparing(Transaction::getValue)); System.out.println(min); System.out.println("hashcode--->"+min.hashCode()); System.out.println("--------------8---------------------------------------------"); //-----------使用map--對映獲取元素並存入collect集合---2012交易的人員姓名 Set<String> collect = transactions.stream().filter(s -> s.getYear() == 2012).map(s -> s.getTrader().getName()).collect(Collectors.toSet()); for (String s : collect) { System.out.print(" 姓名:"+s); System.out.println("-----------9----------------------"); } } }