1. 程式人生 > 實用技巧 >關於Stream流的一些操作用法(案例)

關於Stream流的一些操作用法(案例)

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----------------------");
        }
    }
}