jdk8的stream流式计算的操作
jdk8之后增加了流式计算,现在根据学习了流式计算,并把过程记录下来:
Person.java的bean
package com.zhang.collectordemo;
/**
* @program: utilsdemo
* @description: pojo的测试类
* @author: zhangyu
* @create: 2019-06-18 13:51
*/
public class Person {
private Integer id;
private String name;
public Person(Integer id, String name) {
this.id = id;
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
1) 将list变成map
package com.zhang.collectordemo;
/**
* @program: utilsdemo
* @description: 测试map
* @author: zhangyu
* @create: 2019-06-18 14:08
*/
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class TestMapDemo {
@Test
public void fun() {
List<Person> list = new ArrayList();
list.add(new Person(1, "zhangsan"));
list.add(new Person(2, "lisi"));
list.add(new Person(3, "wangwu"));
// jdk8将链表变成map的方法
Map<Integer, Person> personMap = list.stream().collect(Collectors.toMap(Person::getId, Function.identity()));
// Map<Integer, Person> personMap = list.stream().collect(Collectors.toMap(Person::getId, e->e));
System.out.println(personMap.get(1));
// 从map中添加数据
System.out.println(personMap.get(2).getName());
Map<Integer, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName));
map.put(4, "zhangyu");
System.out.println(map);
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2) 通过流计算重复出现次数:
@Test
public void fun() {
List<String> items = Arrays.asList("apple", "apple", "banana", "apple", "orange", "banana", "papaya");
Map<String, Long> result = items.stream().collect(Collectors.groupingBy(e -> e, Collectors.counting()));
System.out.println(result);
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
3)测试对元素进行转换:
@Test
public void fun2() {
List<Integer> s = Arrays.asList(1, 2, 3, 4);
// s.map(x->x*2).forEach(System.out::print);
s.stream().mapToInt(x -> x).forEach(System.out::print);
System.out.println();
s.stream().mapToDouble(x -> x).forEach(System.out::println);
}
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
4) 测试获取链表中最大值,并且当链表为null时候,设置一个默认最大值。
@Test
public void fun4() {
List<Integer> s = Arrays.asList(-1, -2, -3, -4);
// s.map(x->x*2).forEach(System.out::print);
// s.stream().mapToInt(x -> x).forEach(System.out::print);
// System.out.println();
// double变成int可以用Double的intValue的类
int max = s.stream().mapToInt(x -> x).max().orElse(0);
System.out.println(max);
}
5)测试filter和groupby的操作
package com.zhang.collectordemo;
/**
* @program: utilsdemo
* @description: 测试map
* @author: zhangyu
* @create: 2019-06-18 14:08
*/
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class TestMapDemo {
@Test
public void fun() {
List<Person> list = new ArrayList();
list.add(new Person(1, "zhangsan"));
list.add(new Person(2, "lisi"));
list.add(new Person(3, "lisi"));
list.add(new Person(3, "wangwu"));
list.add(new Person(4, null));
// jdk8 将链表变成map的方法
/* Map<String, Person> personMap = list.stream().filter(e -> (e.getName() != null)).collect(Collectors.toMap(Person::getName, e -> e));
System.out.println(personMap);
System.out.println(personMap.get(null));
// 从map中添加数据
// System.out.println(personMap.get(2).getName());
// Map<Integer, String> map = list.stream().collect(Collectors.toMap(Person::getId, Person::getName));
// map.put(4, "zhangyu");
// System.out.println(map);
List<Person> newList = list.stream().filter(e -> (e.getName() != null)).collect(Collectors.toList());
System.out.println(newList);*/
Map<String, List<Person>> map = list.stream().filter(e -> (e.getName() != null)).collect(Collectors.groupingBy(Person::getName));
for (String name : map.keySet()) {
// System.out.println(map.get(name).get(0).getName());
for (Person person : map.get(name)) {
System.out.println(person.getName() + "---" + person.getId());
}
}
}
}
---------------------
jdk8的stream流式计算的操作的更多相关文章
- 第46天学习打卡(四大函数式接口 Stream流式计算 ForkJoin 异步回调 JMM Volatile)
小结与扩展 池的最大的大小如何去设置! 了解:IO密集型,CPU密集型:(调优) //1.CPU密集型 几核就是几个线程 可以保持效率最高 //2.IO密集型判断你的程序中十分耗IO的线程,只要大于 ...
- Stream流式计算
Stream流式计算 集合/数据库用来进行数据的存储 而计算则交给流 /** * 现有5个用户,用一行代码 ,一分钟按以下条件筛选出指定用户 *1.ID必须是偶数 *2.年龄必须大于22 *3.用户名 ...
- JUC(8)Stream流式计算
文章目录 1.ForkJoin 1.ForkJoin ForkJoin 在JDK1.7 ,并执行任务!提高效率,大数据量 大数据:Map Reduce (把大任务拆分为小任务) ForkJoin特点: ...
- 流式计算(三)-Flink Stream 篇一
原创文章,谢绝任何形式转载,否则追究法律责任! 流的世界,有点乱,群雄逐鹿,流实在太多,看完这个马上又冒出一个,也不知哪个才是真正的牛,据说Flink是位重量级选手,能流计算,还能批处理, 和其他伙 ...
- 流式计算(二)-Kafka Stream
前面说了Java8的流,这里还说流处理,既然是流,比如水流车流,肯定得有流的源头,源可以有多种,可以自建,也可以从应用端获取,今天就拿非常经典的Kafka做源头来说事,比如要来一套应用日志实时分析框架 ...
- 流式计算新贵Kafka Stream设计详解--转
原文地址:https://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653162822&idx=1&sn=8c4611436 ...
- Java的Stream流式操作
前言 最近在实习,在公司看到前辈的一些代码,发现有很多值得我学习的地方,其中有一部分就是对集合使用Stream流式操作,觉得很优美且方便.所以学习一下Stream流,在这里记录一下. Stream是什 ...
- Java8——Stream流式操作的一点小总结
我发现,自从我学了Stream流式操作之后,工作中使用到的频率还是挺高的,因为stream配合着lambda表达式或者双冒号(::)使用真的是优雅到了极致!今天就简单分(搬)享(运)一下我对strea ...
- Java8中的Stream流式操作 - 入门篇
作者:汤圆 个人博客:javalover.cc 前言 之前总是朋友朋友的叫,感觉有套近乎的嫌疑,所以后面还是给大家改个称呼吧 因为大家是来看东西的,所以暂且叫做官人吧(灵感来自于民间流传的四大名著之一 ...
随机推荐
- Vagrant - 打造跨平台的一致开发环境
官网 参考资料 借助 Vagrant ,可以使用 Vagrantfile 文件自动化虚拟机的安装和配置流程,方便快速的打造跨平台的统一开发环境. 1. Vagrant 是啥 Vagrant 用于构建及 ...
- Node.js实战3:加载一组模块。
有时候,希望通过一个require来加载一个目录下的相关文件. 注:这个方法通常被用来作为组织web应用的架构技巧. 为达到这个目的,需要如此操作: 例:建立一个目录,在此目录中创建一个index.j ...
- JedisPool使用注意事项
转自:http://www.cnblogs.com/wangxin37/p/6397783.html JedisPool使用注意事项: 1.每次从pool获取资源后,一定要try-finally释放, ...
- Zepto v1.0-1源码注解
/* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...
- (转载)Solr4.x在Tomcat下的部署
Step1 下载安装包: 下载最新版本安装包 点击此处下载Tomcat 点击此处下载Solr Step2 解压: 解压Tomcat和Solr Step3 拷贝War包: 拷贝\solr-4.x\ ...
- psfstriptable - 从控制台字体中移走嵌入的Uniocde字符表
总览 psfstriptable 字体文件 [输出文件] 描述 psfstriptable 命令从 字体文件 或者标准输入(此时的 字体文件 是单个破折号(-))读取一个可能含有嵌入Unicode字体 ...
- Sass Maps的函数-map-keys($map)
map-keys($map) 函数将会返回 $map 中的所有 key.这些值赋予给一个变量,那他就是一个列表.如: map-keys($social-colors); 其返回的值为: "d ...
- mybatis基本查询
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-/ ...
- Es学习第十课,ElasticSearch集群搭建
前面几课我们已经把ES的基本概念和查询了解了,大家知道ES的核心优势就是天生支持分布式,所以,这课我们专门讲讲怎么搭建实现ES的集群部署. ES分布式原理 1.es分布式概念 主分片(Primary ...
- 使用字符流(Writer、Reader)完成对文件的读写操作
字符流 字符输出流:Writer,对文件的操作使用子类FileWriter 字符输入流:Reader,对文件的操作使用子类FileReader 每次操作的是一个字符 文件字符操作流会自带缓存,默认大小 ...