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()的区别 ...
随机推荐
- 记录-- vue+element树节点的标注
html(背景:状态标注3钟颜色红黄绿对应0,1,2,) <el-tree @check="slclasscheck" v-if="treeShow" : ...
- LNMP 架构安装部署
PHP 安装 LNMP 下 php 在 Apache 服务下是 libphp5.so nginx 服务下是 9000 端口 #确保 web 服务和 MySQL 正常 143 [root@oldboy ...
- init_module - 初始化一条可加载模块的记录.
总览 #include <linux/module.h> int init_module(const char *name, struct module *image); 描述 init_ ...
- FMCJ450-基于ADRV9009的射频收发模块
FMCJ450-基于ADRV9009的射频收发模块 一.板卡概述 接收路径包括两个具有动态范围的独立式宽带宽直接转换接收器.该器件还支持宽带宽分时观察路径接收器,供在 TDD 应用中使用.完整的接收子 ...
- 魔术矩阵Java代码
//该魔术矩阵默认从右上角45度递增 //@漫流——595128841在qq点com //import java.util.Arrays; //用于打印API函数 public class 魔方矩阵 ...
- 清华集训2014 sum
清华集训2014sum 求\[∑_{i=1}^{n}(-1)^{⌊i√r⌋}\] 多组询问,\(n\leq 10^9,t\leq 10^4, r\leq 10^4\). 吼题解啊 具体已经讲得很详细了 ...
- Hive 窗口函数LEAD LAG FIRST_VALUE LAST_VALUE
窗口函数(window functions)对多行进行操作,并为查询中的每一行返回一个值. OVER()子句能将窗口函数与其他分析函数(analytical functions)和报告函数(repor ...
- jquery easyui datagrid 远程加载数据----把主键渲染为值遇到的问题及解决方案
起因:数据库中一些字段存的是代表具体值的数字,需要渲染为具体值 monggodb中的字典 mysql中存放的值为:expertin代表教练擅长的搏击技能 jquery easyui中的相关代码如下:用 ...
- pyqt5-复合控件中的子控件
天子骄龙
- Keras class_weight和sample_weight用法
搬运: https://stackoverflow.com/questions/57610804/when-is-the-timing-to-use-sample-weights-in-keras i ...