java8 stream 流 例子
2018-06-18 03:50:56来源:未知 阅读 ()
1 Trader raoul = new Trader("Raoul", "Cambridge"); 2 Trader mario = new Trader("Mario","Milan"); 3 Trader alan = new Trader("Alan","Cambridge"); 4 Trader brian = new Trader("Brian","Cambridge"); 5 List<Transaction> transactions = Arrays.asList( 6 new Transaction(brian, 2011, 300), 7 new Transaction(raoul, 2012, 1000), 8 new Transaction(raoul, 2011, 400), 9 new Transaction(mario, 2012, 710), 10 new Transaction(mario, 2012, 700), 11 new Transaction(alan, 2012, 950) 12 );
public class Trader{ private final String name; private final String city; public Trader(String n, String c){ this.name = n; this.city = c; } public String getName(){ return this.name; } public String getCity(){ return this.city; } public String toString(){ return "Trader:"+this.name + " in " + this.city; } }
public class Transaction{ private final Trader trader; private final int year; private final int value; public Transaction(Trader trader, int year, int value){ this.trader = trader; this.year = year; this.value = value; } public Trader getTrader(){ return this.trader; } public int getYear(){ return this.year; } public int getValue(){ return this.value; } public String toString(){ return "{" + this.trader + ", " + "year: "+this.year+", " + "value:" + this.value +"}"; } }
//找出2011年的所有交易并按交易额排序(从低到高) List<Transaction> tr2011 = transactions.stream() .filter(transaction -> transaction.getYear() == 2011)//给filter传递一个谓词来选择2011年的交易 .sorted(comparing(Transaction::getValue))//按照交易额进行排序 .collect(toList());//将生成的Stream中的所有元素收集到一个List中
//交易员都在哪些不同的城市工作过 List<String> cities = transactions.stream() .map(transaction -> transaction.getTrader().getCity())//提取与交易相关的每位交易员的所在城市 .distinct()//只选择互不相同的城市 .collect(toList());
//查找所有来自于剑桥的交易员,并按姓名排序 List<Trader> traders = transactions.stream() .map(Transaction::getTrader)//从交易中提取所有交易员 .filter(trader -> trader.getCity().equals("Cambridge"))//仅选择位于剑 桥的交易员 .distinct()//确保没有任何重复 .sorted(comparing(Trader::getName))//对生成的交易员流按照姓名进行排序 .collect(toList());
//返回所有交易员的姓名字符串,按字母顺序排序 String traderStr = transactions.stream() .map(transaction -> transaction.getTrader().getName())//提取所有交易员姓名,生成一个Strings构成的Stream .distinct()//只选择不相同的姓名 .sorted()//对姓名按字母顺序排序 .reduce("", (n1, n2) -> n1 + n2);//逐个拼接每个名字,得到一个将所有名字连接起来的String
//有没有交易员是在米兰工作的 boolean milanBased = transactions.stream() .anyMatch(transaction -> transaction.getTrader() .getCity() .equals("Milan"));//把一个谓词传递给anyMatch,检查是否有交易员在米兰工作
//打印生活在剑桥的交易员的所有交易额 transactions.stream() .filter(t -> "Cambridge".equals(t.getTrader().getCity()))//选择住在剑桥的交易员所进行的交易 .map(Transaction::getValue)//提取这些交易的交易额 .forEach(System.out::println);//打印每个值
//所有交易中,最高的交易额是多少 Optional<Integer> highestValue = transactions.stream() .map(Transaction::getValue)//提取每项交易的交易额 .reduce(Integer::max);//计算生成的流中的最大值
//找到交易额最小的交易 Optional<Transaction> smallestTransaction = transactions.stream() .reduce((t1, t2) ->t1.getValue() < t2.getValue() ? t1 : t2);//通过反复比较每个交易的交易额,找出最小的交易 Optional<Transaction> smallestTransaction = transactions.stream() .min(comparing(Transaction::getValue));//流支持min和max方法,它们可以接受一个Comparator作为参数,指定计算最小或最大值时要比较哪个键值
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:进制转换
下一篇:字节码技术及动态代理
- 学习Java 8 Stream Api (4) - Stream 终端操作之 collect 2020-06-11
- Spring WebFlux 学习笔记 - (一) 前传:学习Java 8 Stream Ap 2020-06-11
- Java--Stream流详解 2020-06-10
- java8 stream的分组功能,具体时候是真的好用 2020-06-10
- XStream学习手册 2020-06-04
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash