java8 流的使用学习笔记

xiaoxiao2021-02-28  128

中间操作和终端操作

操作类型返回类型使用的类型/函数式接口函数描述符作用filter中间Stream< T >Predicate< T>T->boolean筛选distinct中间Stream< T >T->boolean去重复skip中间Stream< T >longT->boolean跳过N个元素limit中间Stream< T >longT->boolean截取N个元素map中间Stream< R >Function< T,R >T->R映射flatMap中间Stream< R >Function< T,Stream< R > >T->Stream< R >扁平流映射sorted中间Stream< T >Comparator< T >(T,T)->int排序anyMatch终端booleanPredicate< T>T->boolean查找匹配noneMatch终端booleanPredicate< T>T->boolean查找匹配allMatch终端booleanPredicate< T>T->boolean查找匹配findAny终端Optional< T>查找匹配findFurst终端Optional< T>查找匹配forEach终端voidConsumer< T>T->void循环collect终端RCollector< T,A,R>返回listreduce终端booleanPredicate< T>(T,T)->T归纳总结count终端long返回集合大小

练习题

创建基础数据(实体类在下面)

Trader trader=new Trader("范冰冰","南昌"); Trader trader1=new Trader("金晨","南京"); Trader trader2=new Trader("林志玲","南昌"); Trader trader3=new Trader("江一燕","深圳"); List<Transaction> transactions=Arrays.asList( new Transaction(trader,2011,300), new Transaction(trader1,2012,1000), new Transaction(trader2,2011,400), new Transaction(trader3,2012,710), new Transaction(trader2,2012,700), new Transaction(trader1,2012,950) );

练习题答案

System.out.println("2011年发生的所有交易,并按交易额排序(从低到高):" +transactions.stream() .filter(a>a.getYear()==2011) .sorted(Comparator.comparing(Transaction::getValue)).collect(Collectors.toList())); System.out.println("交易员都在那些不同的城市工作过:" +transactions.stream().map(o->o.getTrader().getCity()) .distinct().collect(Collectors.toList())); System.out.println("所有来自南昌的交易员,并按姓名排序:" .map(o->o.getTrader().getName()).distinct().sorted().collect(Collectors.toList())); System.out.println("返回所有交易员的姓名字符串,按首字母顺序排列:" .distinct().sorted().reduce("",(a,b)->a+" "+b)); System.out.println("有没有交易员是在南京工作的:" .map(Transaction::getTrader).findAny().get().getName()); System.out.println("打印生活在南昌的交易员的所有交易额--------------开始"); transactions.stream().filter(a->a.getTrader().getCity().equals("南昌")) .forEach(a-> System.out.println(a.getTrader().getName()+" "+a.getValue())); System.out.println("打印生活在南昌的交易员的所有交易额--------------结束"); System.out.println("所有交易中最高的交易额:" +transactions.stream().map(Transaction::getValue).reduce(Integer::max).get()); System.out.println("所有交易中最小的交易额:" +transactions.stream().map(Transaction::getValue).reduce(Integer::min).get()); public class Trader { private String name; private String city; public Trader(String name, String city) { this.name = name; this.city = city; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } @Override public String toString() { return "交易员:"+this.name+" 来自 "+this.city; }

}

public class Transaction { private Trader trader; private int year; private int value; public Transaction(Trader trader, int year, int value) { this.trader = trader; this.year = year; this.value = value; } public Trader getTrader() { return trader; } public void setTrader(Trader trader) { this.trader = trader; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } @Override public String toString() { return "{"+this.trader+", "+"时间:"+this.year+", "+" 交易额:"+this.value+"}"; }

}

转载请注明原文地址: https://www.6miu.com/read-37331.html

最新回复(0)