最近研究了一下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学习的一点总结的更多相关文章

  1. Java8学习笔记----Lambda表达式 (转)

    Java8学习笔记----Lambda表达式 天锦 2014-03-24 16:43:30 发表于:ATA之家       本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人 ...

  2. Java8学习(3)- Lambda 表达式

    猪脚:以下内容参考<Java 8 in Action> 本次学习内容: Lambda 基本模式 环绕执行模式 函数式接口,类型推断 方法引用 Lambda 复合 上一篇Java8学习(2) ...

  3. Java8学习笔记目录

    Java8学习笔记(一)--Lambda表达式 Java8学习笔记(二)--三个预定义函数接口 Java8学习笔记(三)--方法引入 Java8学习笔记(四)--接口增强 Java8学习笔记(五)-- ...

  4. Java8学习笔记(八)--方法引入的补充

    在Java8学习笔记(三)--方法引入中,简要总结了方法引入时的使用规则,但不够完善.这里补充下几种情况: 从形参到实例方法的实参 示例 public class Example { static L ...

  5. 最近关于Qt学习的一点碎碎念

    最近关于Qt学习的一点碎碎念 一直在使用Qt,但是最近对Qt的认识更加多了一些.所以想把自己的一些想法记录下来. Qt最好的学习资料应该是官方的参考文档了.对Qt的每一个类都有非常详细的介绍.我做了一 ...

  6. 关于Python学习的一点说明

    关于Python学习的一点说明 我是用什么地方的资料来学习python的呢? 答案当然是鼎鼎大名的GitHub了. 5万多星推荐,100天让你从入门到精通,你值得拥有,点我进入查看

  7. JAVA8学习——深入浅出Lambda表达式(学习过程)

    JAVA8学习--深入浅出Lambda表达式(学习过程) lambda表达式: 我们为什么要用lambda表达式 在JAVA中,我们无法将函数作为参数传递给一个方法,也无法声明返回一个函数的方法. 在 ...

  8. JAVA8学习——新的时间日期API&Java8总结

    JAVA8-时间日期API java8之前用过的时间日期类. Date Calendar SimpleDateFormat 有很多致命的问题. 1.没有时区概念 2.计算麻烦,实现困难 3.类是可变的 ...

  9. 【转】Java8学习笔记(1) -- 从函数式接口说起

    http://blog.csdn.net/zxhoo/article/details/38349011 函数式接口 理解Functional Interface(函数式接口,以下简称FI)是学习Jav ...

随机推荐

  1. ZooKeeper典型应用场景:分布式锁

    分布式锁是控制分布式系统之间同步访问共享资源的一种方式.如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致 ...

  2. 【java并发核心二】Exchanger的使用

    类 Exchanger 的功能可以使2个线程之间传输数据,比生产者/消费者模式方便. Exchanger类的结构很简单,重点就是exchange()方法. exchange()方法是阻塞执行的,可以设 ...

  3. go标准库-log包源码学习

    log包是go语言提供的一个简单的日志记录功能,其中定义了一个结构体类型 Logger,是整个包的基础部分,包中的其他方法都是围绕这整个结构体创建的. Logger结构 Logger结构的定义如下: ...

  4. 潭州课堂25班:Ph201805201 WEB 之 CSS 第三课 (课堂笔记)

    在 CSS 中第个标签都可以认为是个盒子,盒子就有以下几层 边框 border border-top: 5px solid black; /*上边框 实线*/ border-right: 3px do ...

  5. flask之wtform与flask-session组件

    1.wtform from flask import Flask, render_template, request, redirect from wtforms import Form from w ...

  6. 第一次打开app

    //判断是不是第一次启动应用 if (![[NSUserDefaults standardUserDefaults] boolForKey:@"everLaunched"]) { ...

  7. C++泛型编程(1)--自己实现C++迭代器/遍历器 iterator

    1.原理 迭代器又称为遍历器,用于访问容器中的数据,迭代器旨在算法和容器之间搭建访问的桥梁,从而使算法和数据分离,不用关心数据具体的存储细节.具体的原理描述请参考以下两个博客: [1].C++迭代器 ...

  8. Linux和类Unix系统上5个最佳开源备份工具

    一个好的备份最基本的目的就是为了能够从一些错误中恢复: 人为的失误 磁盘阵列或是硬盘故障 文件系统崩溃 数据中心被破坏等等. 所以,我为大家罗列了一些开源的软件备份工具. 当为一个企业选择备份工具的时 ...

  9. android:碎片的生命周期

    和活动一样,碎片也有自己的生命周期,并且它和活动的生命周期实在是太像了,我相 信你很快就能学会,下面我们马上就来看一下. 4.3.1    碎片的状态和回调 还记得每个活动在其生命周期内可能会有哪几种 ...

  10. java异常中throw和throws的区别

    throws和throwthrows:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁.  用在方法声明后面,跟的是异常类名  可以跟多个异常类名,用逗号隔开  表 ...