jdk8 list stream的使用

2018-12-18  本文已影响0人  zycisbg

平时写代码的时候,经常会对list进行操作,自从1.8之后有了stream 。能使用的话,就经常使用了,现在在这归总一下经常使用的几个stream的API。

为了方便下边理解,创建两个实体类和一个list

/**
 * 交易实体类
 */
public class Transaction {
    //id
    private Integer id;
    //货币
    private Currency currency;
    //金额
    private Double money;
    //-------省略  getter和setter--------
}

/**
 * 货币
 */
public class Currency {
    private Integer id;
    private String name;
  //-------省略  getter和setter--------
}


//----------------------init-----------------------
 List<Transaction> transactions = Arrays.asList(new Transaction(1,new Currency(1,"人民币"),22.22),
            new Transaction(2,new Currency(2,"美元"),30.21),
            new Transaction(3,new Currency(2,"美元"),29.22),
            new Transaction(4,new Currency(2,"美元"),18.22),
            new Transaction(5,new Currency(1,"人民币"),15.5));
    @Test
    public void test1(){
        //转换成一个新的list
        List<Transaction> filterList = transactions.stream().filter(t -> t.getMoney() > 20).collect(Collectors.toList());
        //满足条件的循环处理
        transactions.stream().filter(t -> t.getMoney() > 20).forEach(System.out::println);
    }
    @Test
    public void test2(){
        Map<Currency, List<Transaction>> currencyListMap = transactions.stream().collect(Collectors.groupingBy(Transaction::getCurrency));
        Map<Currency, List<Transaction>> currencyListMap1 = transactions.stream().collect(Collectors.groupingBy(t->t.getCurrency()));
    }
    @Test
    public void test3(){
        transactions.stream().filter(t -> t.getMoney()>20)
                .distinct()
                .forEach(System.out::println);
    }
    @Test
    public void test4(){
        transactions.stream()
                .limit(2)
                .forEach(System.out::println);
        transactions.stream()
                .skip(2)
                .forEach(System.out::println);

    }
   @Test
   public void test5(){
       List<Currency> collect = transactions.stream()
               .map(Transaction::getCurrency)
               .collect(toList());

       collect.forEach(System.out::println);

       transactions.stream()
               .map(Transaction::getMoney)
               .forEach(System.out::println);
   }
    @Test
    public void test6(){
        boolean b = transactions.stream()
                .allMatch(t -> t.getMoney()<20);
        System.out.println(b);

        boolean b1 = transactions.stream()
                .anyMatch(t -> t.getMoney() < 20);
        System.out.println(b1);

        boolean b2 = transactions.stream()
                .noneMatch(t -> t.getMoney() < 20);

        System.out.println(b2);
    }
    @Test
    public void test7(){
        transactions.stream()
                .findFirst()
                .ifPresent(System.out::println);
        transactions.stream()
                .findAny()
                .ifPresent(System.out::println);
    }
    @Test
    public void test8(){
        //求和
        transactions.stream()
                .map(Transaction::getMoney)
                .reduce(Double::sum)
                .ifPresent(System.out::println);
        //求积
        transactions.stream()
                .map(Transaction::getMoney)
                .reduce( (a, b) -> a * b)
                .ifPresent(System.out::println);
    }
    @Test
    public void test9(){

        long count = transactions.stream()
                .count();
        System.out.println(count);
    }
    @Test
    public void test10(){
        String collect = transactions.stream().map(t -> t.getCurrency().getName()).distinct().collect(joining(","));
        System.out.println(collect);
    }
   @Test
   public void test11(){
       Double avg = transactions.stream().collect(Collectors.averagingDouble(Transaction::getMoney));
       System.out.println(avg);
       Double sum = transactions.stream().collect(Collectors.summingDouble(Transaction::getMoney));
       System.out.println(sum);
   } 
    @Test
    public void test12(){
        Map<Integer, Transaction> collect = transactions.stream().collect(Collectors.toMap(Transaction::getId, t -> t));
        System.out.println(collect);
    }
上一篇 下一篇

猜你喜欢

热点阅读