NumericStream && Stream综合练习
一、NumericStream
我们可以将一个Stream转化为对应的数字Stream,如mapToInt、mapToLong转化为IntStream、LongStream等(NumericStream又可以通过boxed、mapToObj方法转化回去),这样做的好处是可以节省比较多的内存开销,数据量大的话是比较明显的,因为int 4个字节的数字比Integer类型的小很多。所以能用NumericStream类型的就用。
package com.cy.java8; import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream; public class NumericStream { public static void main(String[] args) {
Stream<Integer> stream = Arrays.stream(new Integer[]{1, 2, 3, 4, 5}); //把大于3的和打印出来
Integer result = stream.filter(i -> i.intValue() > 3).reduce(0, Integer::sum);
System.out.println(result); //可以将Stream<Integer>转化为IntStream,再求和
stream = Arrays.stream(new Integer[]{1, 2, 3, 4, 5});
int result2 = stream.mapToInt(Integer::intValue).filter(i -> i > 3).sum();
System.out.println(result2); //将IntStream转化为Stream<Integer>
stream = Arrays.stream(new Integer[]{1, 2, 3, 4, 5});
IntStream intStream = stream.mapToInt(Integer::intValue);
Stream<Integer> boxed = intStream.boxed(); //计算1..100数里面,有哪些数能和9,满足勾股定理,然后将这些数以[a, b, c]的形式打印出来
int a = 9;
IntStream.rangeClosed(1, 100).filter(b -> Math.sqrt(b * b + a * a) % 1 == 0)
.boxed()
.map(b -> new int[]{a, b, (int) Math.sqrt(a * a + b * b)})
.forEach(r -> System.out.println("a=" + r[0] + ", b=" + r[1] + ", c=" + r[2])); //或者这么写
IntStream.rangeClosed(1, 100).filter(b -> Math.sqrt(b * b + a * a) % 1 == 0)
.mapToObj(b -> new int[]{a, b, (int) Math.sqrt(a * a + b * b)})
.forEach(r -> System.out.println("a=" + r[0] + ", b=" + r[1] + ", c=" + r[2]));
} }
打印结果:
9
9
a=9, b=12, c=15
a=9, b=40, c=41
a=9, b=12, c=15
a=9, b=40, c=41
二、Stream综合练习
需求:
1.获取2011年所有的交易,根据value排序。
2.哪个是交易员工作的唯一城市?
3.找到所有来自剑桥的交易员,根据名字排序
4.返回一个根据ASCII排序的所有交易员的名字的string
5.有来自米兰的交易员吗?
...
代码:
Transaction:
package com.cy.java8; import lombok.AllArgsConstructor;
import lombok.Data; /**
* 交易数据
*/
@AllArgsConstructor
@Data
public class Transaction {
private final Trader trader;
private final int year;
private final int value;
}
Trader:
package com.cy.java8; import lombok.AllArgsConstructor;
import lombok.Data; /**
* 交易员
*/
@AllArgsConstructor
@Data
public class Trader {
private final String name;
private final String city;
}
package com.cy.java8; import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors; public class StreamInAction { 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)
); //获取2011年的所有交易,并且按value排序
List<Transaction> result = transactions.stream().
filter(t -> t.getYear() == 2011)
.sorted(Comparator.comparingInt(Transaction::getValue))
.collect(Collectors.toList());
System.out.println(result); //[Transaction(trader=Trader(name=Brian, city=Cambridge), year=2011, value=300), Transaction(trader=Trader(name=Raoul, city=Cambridge), year=2011, value=400)] //交易员工作的城市有哪些
List<String> result1 = transactions.stream().map(t -> t.getTrader().getCity()).distinct().collect(Collectors.toList());
System.out.println(result1); //[Cambridge, Milan] //找到所有来自剑桥的交易员,按名字排序
List<Trader> result2 = transactions.stream().map(Transaction::getTrader)
.filter(t -> t.getCity().equals("Cambridge"))
.distinct()
.sorted(Comparator.comparing(Trader::getName))
.collect(Collectors.toList());
System.out.println(result2); //[Trader(name=Alan, city=Cambridge), Trader(name=Brian, city=Cambridge), Trader(name=Raoul, city=Cambridge)] //返回一个字符串,包括所有交易员的名字,按ascii排序
String result3 = transactions.stream().map(t -> t.getTrader().getName())
.distinct()
.sorted()
.reduce("", (name1, name2) -> name1 + name2);
System.out.println(result3); //AlanBrianMarioRaoul //有来自米兰的交易员吗
boolean result4 = transactions.stream().anyMatch(t -> t.getTrader().getCity().equals("Milan"));
System.out.println(result4); //true //打印所有的交易value总和来自于来自于生活在剑桥的交易员
Integer result5 = transactions.stream().filter(t -> t.getTrader().getCity().equals("Cambridge"))
.map(Transaction::getValue)
.reduce(0, (t1, t2) -> t1 + t2);
System.out.println(result5); //2650 //最高的交易的value
Optional<Transaction> optional = transactions.stream().max(Comparator.comparingInt(Transaction::getValue));
System.out.println(optional.get().getValue()); //
System.out.println(transactions.stream().map(Transaction::getValue).reduce((i,j) -> i>j?i:j).get()); //1000 //最小的交易的value
System.out.println(transactions.stream().map(Transaction::getValue).reduce(Integer::min).get()); //
}
}
---
NumericStream && Stream综合练习的更多相关文章
- java 8新内容整理
目录 一.Java 8 Lambda 表达式 1.1 语法 1.2 Lambda 表达式实例(常见) 二.Java 8 Stream 2.1 什么是 Stream? 2.2生成流 2.3 forE ...
- jQuery与Struts2综合应用[stream/json]
一.使用stream类型的Result实现Ajax 具体步骤: ① 定义InputStream类型的成员变量及getter和setter ②具体业务方法中将要发送到客户端的json字符串赋值给成员变量 ...
- C#综合揭秘——通过修改注册表建立Windows自定义协议
引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...
- 基于.NET Socket API 通信的综合应用
闲谈一下,最近和客户进行对接Scoket 本地的程序作为请求方以及接受方,对接Scoket 的难度实在比较大,因为涉及到响应方返回的报文的不一致性,对于返回的报文的格式我需要做反序列化的难度增大了不少 ...
- 【转】C#综合揭秘——通过修改注册表建立Windows自定义协议
引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...
- 上传文件出错:org.apache.commons.fileupload.FileUploadBase$IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly
最近做一个web项目中有上传文件的功能,已经写出并在本地和部署到服务器上测试了好几个文件上传都没问题(我用的是tomcat).后来又上传了一个700多K的文件(前边的都是不足600K的,并且这个wor ...
- C++ 容器的综合应用的一个简单实例——文本查询程序
C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...
- .NET Core装饰模式和.NET Core的Stream
该文章综合了几本书的内容. 某咖啡店项目的解决方案 某咖啡店供应咖啡, 客户买咖啡的时候可以添加若干调味料, 最后要求算出总价钱. Beverage是所有咖啡饮料的抽象类, 里面的cost方法是抽象的 ...
- JAVA 综合面试题
JAVA 综合面试题 2007-08-12 目录 TOC \o "1-3" \h \z \u Java面试题整理 9 Java面向对象 9 1. super()与this()的区别 ...
随机推荐
- 使用svn未响应卡死的几个原因,commit时checkout时
1.commit 时 很可能是:检索文件内容过多导致,解决:不要在最外层文件夹目录下commit 2.checkout时 很可能是:地址错误
- Vmware 安装 ghost 版 win 7
很早就弄过vmware,很可惜一直没有仔细研究过,这次要安装一个win7系统,重新又学一下了一下,下面说一下安装的操作步骤吧. 第一步,下载vmware,原版的下载地址就不说了,上传到百度网盘自己下载 ...
- [NoSql注入] MongoDB学习
0x00 安装 下载:http://dl.mongodb.org/dl/win32/x86_64 安装:http://www.runoob.com/mongodb/mongodb-window-ins ...
- .align 5 .MACRO .ENDM .word
ARM的.align 5就是2的5次方对齐,也就是4字节对齐 .macro <name> {<arg_1} {,<arg_2>} … {,<arg_N>} 定 ...
- chrome 开发者工具 - local overrides
使用chrome 作为本地网络服务 chrome 65+ 新功能, 使用我们自己的本地资源覆盖网页所使用的资源,可以使用本地css文件覆盖网页的css文件,修改样式. 类似的,使用DevTools的工 ...
- setTimeout延迟加载
使用setTimeout延时计算 setTimeout当时间为0时
- docker容器共享宿主机环境,从而为镜像体积减负
一.背景介绍 响应公司技术发展路线,开发的服务均需要将打成docker镜像,使用docker进行统一管理.可是随着服务越来越多,镜像也越来越多.每次制作镜像的时候都需要将依赖打进容器,这样一个jre的 ...
- 23.二叉搜索树的后序遍历(python)
题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 这道题特别傻的地方: 当输入sequence为空时 ...
- 目标检测 | OHEM
参考:https://blog.csdn.net/app_12062011/article/details/77945600 参考:http://www.cnblogs.com/sddai/p/102 ...
- 11.关于django的content_type表
****** Django的contenttype表中存放发的是app名称和模型的对应关系 contentType使用方式 - 导入模块 from django.contrib.contenttype ...