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()的区别 ...
随机推荐
- openlayers之框选放缩DragZoom(vue项目)
环境vue3.0项目 最初是以npm i ol -s方式安装的ol,import方式导入引用,但是实际使用的时候一直报ol is not defined,最后选择在HTML以script标签引入ol, ...
- mysql5和mysql8连接数据库的配置
mysql5: mysql8: db.properties jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3 ...
- Delphi 数据类型
- 安装superset踩过的坑
问题一: # fabmanager create-admin --app superset setuptools_scm.version.SetuptoolsOutdatedWarning: your ...
- java.util.Arrays (JDK 1.7)
1.asList //返回由指定数组支持的固定大小的列表,返回的列表是可序列化的 public static <T> List<T> asList(T... a) { retu ...
- java面试(Web相关)06
1.JSP 和 servlet 有什么区别? JSP 是 servlet 技术的扩展,本质上就是 servlet 的简易方式.servlet 和 JSP 最主要的不同点在于,servlet 的应用逻辑 ...
- php关于jquery ajax json不返回数据的问题
分析原因: 1.php端代码有错导致echo输出错误,导致ajax返回函数不执行 2.jquery版本原因 3.juqery前端script代码问题
- idea 导出可以直接运行的jar 文件
刚开始采用的maven插件是 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId ...
- 基于vue模块化开发后台系统——准备工作
文章目录如下:项目效果预览地址项目开源代码基于vue模块化开发后台系统--准备工作基于vue模块化开发后台系统--构建项目基于vue模块化开发后台系统--权限控制 前言 本文章是以学习为主,练习一下v ...
- 运维工程师之IDC系列
因为我公司在用浪潮服务器,所以说链接暂时是浪潮服务器 1.用UltraISO制作U盘启动安装系统 链接 http://www.4008600011.com/archives/8816 ones 刻录 ...