java8学习的一点总结
最近研究了一下java8 弄了几个例子学习了一下用法:
创建了一个实体类:
@Data
public class Apple {
private Integer id;
private String name;
private BigDecimal money;
private Integer num; public Apple(Integer id, String name, BigDecimal money, Integer num) {
this.id = id;
this.name = name;
this.money = money;
this.num = num;
}
}
以下是具体的例子:
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors; /**
* java 8 流工作模式
*
* @author bzs on 2018/11/1.
*/
public class Test {
public static void main(String[] args) { List<Apple> appleList = new ArrayList<>();//存放apple对象集合 Apple apple1 = new Apple(1, "苹果1", new BigDecimal("3.25"), 10);
Apple apple12 = new Apple(1, "苹果2", new BigDecimal("1.35"), 20);
Apple apple2 = new Apple(2, "香蕉", new BigDecimal("2.89"), 30);
Apple apple3 = new Apple(3, "荔枝", new BigDecimal("9.99"), 40); appleList.add(apple1);
appleList.add(apple12);
appleList.add(apple2);
appleList.add(apple3);
//1、list转map,value 值是一个对象但是可以取其中一个对象
Map<Integer, Apple> appleMapOnly = appleList.stream()
.collect(Collectors.toMap(Apple::getId, apple -> apple, (value1, value2) -> value1));
System.out.println(appleMapOnly.toString()); System.out.println("===================================="); //1、list转map,value 值是一个对象
Map<Integer, Apple> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getNum, apple -> apple));
System.out.println(appleMap.toString()); System.out.println("-------------------------------------"); //1、list转map,value 值是一个集合
Map<Integer, List<Apple>> appleMapList = appleList.stream().collect(Collectors.groupingBy(Apple::getId));
System.out.println(appleMapList.toString()); System.out.println("也可以这样,第二种写法适合集合对象转换的情况*****************");
//2、分组,value 值是一个集合
Map<Integer, List<Apple>> appleMapListMoney = appleList.stream()
.collect(Collectors.groupingBy(Apple::getId, Collectors.mapping(apple -> apple, Collectors.toList())));
System.out.println(appleMapListMoney.toString()); System.out.println("-------------------------------------");
//3、filter 过滤器
List<Apple> filterList = appleList.stream().filter(apple -> apple.getName().equals("香蕉"))
.collect(Collectors.toList());
System.out.println(filterList.toString()); System.out.println("-------------------------------------"); //4、求和
//计算 总金额
BigDecimal totalMoney = appleList.stream().map(Apple::getMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
System.err.println("totalMoney:" + totalMoney); //totalMoney:17.48 //计算 数量
int sum = appleList.stream().mapToInt(Apple::getNum).sum();
System.err.println("sum:" + sum); //sum:100 System.out.println("-------------------------------------"); //5.获取所有的id集合(去重以后的)
Set<Integer> idSet = appleList.stream().map(a -> a.getId()).collect(Collectors.toSet());
System.out.println(new ArrayList<>(idSet)); System.out.println("-------------------------------------"); //6.排序
List<Apple> sortList = appleList.stream().sorted(Comparator.comparing(Apple::getId).reversed())
.collect(Collectors.toList()); System.out.println(sortList.toString()); List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3); List<Integer> list2 = new ArrayList<>();
list2.add(3);
list2.add(4);
list2.add(5); System.out.println("====求交集==="); List<Integer> list = list1.stream().filter(t -> list2.contains(t)).collect(Collectors.toList());
list.stream().forEach(System.out::println); System.out.println("====求差集===");
list = list1.stream().filter(t -> !list2.contains(t)).collect(Collectors.toList());
list.stream().forEach(System.out::println); System.out.println("====求并集==="); list.addAll(list1);
list.addAll(list2);
list = list.stream().distinct().collect(Collectors.toList());
list.stream().forEach(System.out::println);
} }
java8学习的一点总结的更多相关文章
- Java8学习笔记----Lambda表达式 (转)
Java8学习笔记----Lambda表达式 天锦 2014-03-24 16:43:30 发表于:ATA之家 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人 ...
- Java8学习(3)- Lambda 表达式
猪脚:以下内容参考<Java 8 in Action> 本次学习内容: Lambda 基本模式 环绕执行模式 函数式接口,类型推断 方法引用 Lambda 复合 上一篇Java8学习(2) ...
- Java8学习笔记目录
Java8学习笔记(一)--Lambda表达式 Java8学习笔记(二)--三个预定义函数接口 Java8学习笔记(三)--方法引入 Java8学习笔记(四)--接口增强 Java8学习笔记(五)-- ...
- Java8学习笔记(八)--方法引入的补充
在Java8学习笔记(三)--方法引入中,简要总结了方法引入时的使用规则,但不够完善.这里补充下几种情况: 从形参到实例方法的实参 示例 public class Example { static L ...
- 最近关于Qt学习的一点碎碎念
最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...
- 关于Python学习的一点说明
关于Python学习的一点说明 我是用什么地方的资料来学习python的呢? 答案当然是鼎鼎大名的GitHub了. 5万多星推荐,100天让你从入门到精通,你值得拥有,点我进入查看
- JAVA8学习——深入浅出Lambda表达式(学习过程)
JAVA8学习--深入浅出Lambda表达式(学习过程) lambda表达式: 我们为什么要用lambda表达式 在JAVA中,我们无法将函数作为参数传递给一个方法,也无法声明返回一个函数的方法. 在 ...
- JAVA8学习——新的时间日期API&Java8总结
JAVA8-时间日期API java8之前用过的时间日期类. Date Calendar SimpleDateFormat 有很多致命的问题. 1.没有时区概念 2.计算麻烦,实现困难 3.类是可变的 ...
- 【转】Java8学习笔记(1) -- 从函数式接口说起
http://blog.csdn.net/zxhoo/article/details/38349011 函数式接口 理解Functional Interface(函数式接口,以下简称FI)是学习Jav ...
随机推荐
- cache 基本原理
Cache 主要由 Cache Tag,Cache 存储体,Cache 控制模块组成.Cache Tag 主要用来记录 Cache 存储体中数据的位置和判断 Cache 内数据是否命中: Ca ...
- Web轻量级扫描工具Skipfish
Web轻量级扫描工具Skipfish 1. Skipfish 简介 2. Skipfish 基本操作 3.身份认证 一. Skipfish 简介 Skipfish是一款主动的Web应用程序安全侦察工具 ...
- ogg - 从oracle到mysql的同步
说明:这篇文章将介绍如何配置oracle到mysql的ogg同步 源端:ip-192.168.56.11 数据库类型-oracle 11.2.0.4目标端:ip-192.168.56.71 数据库类型 ...
- hystrix dashboard Unable to connect to Command Metric Stream解决办法
spring cloud 在初次使用 hystrix dashboard仪表盘的时候很容易出现hystrix dashboard Unable to connect to Command Metric ...
- Outlook错误代码
一般错误1 0x80004005 MISC The operation failed Virus Scanner Integration Issue Usually Related To Script ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- JavaScript简易教程
这是我所知道的最完整最简洁的JavaScript基础教程. 这篇文章带你尽快走进JavaScript的世界——前提是你有一些编程经验的话.本文试图描述这门语言的最小子集.我给这个子集起名叫做“Java ...
- Codeforces 932G Palindrome Partition 回文树+DP
题意:给定一个串,把串分为偶数段 假设分为$s_1,s_2,s_3....s_k$ 求满足$ s_1=s_k,s_2=s_{ k-1 }... $的方案数模$10^9+7$ $|S|\leq 10^6 ...
- LOJ2542 随机游走 Min-Max容斥+树上期望DP
搞了一下午 真的是啥都不会 首先这道题要用到Min-Max容斥 得到的结论是 设 $Max(S)$表示集合里最晚被访问的节点被访问的期望步数 设 $Min(S)$表示集合里最早被访问的节点被访问的期望 ...
- UVa 127 - "Accordian" Patience POJ 1214 链表题解
UVa和POJ都有这道题. 不同的是UVa要求区分单复数,而POJ不要求. 使用STL做会比較简单,这里纯粹使用指针做了,很麻烦的指针操作,一不小心就错. 调试起来还是很费力的 本题理解起来也是挺费力 ...