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 前言 之前总是朋友朋友的叫,感觉有套近乎的嫌疑,所以后面还是给大家改个称呼吧 因为大家是来看东西的,所以暂且叫做官人吧(灵感来自于民间流传的四大名著之一 ...
随机推荐
- 让 Visio 2003/2007 同时开多个独立窗口
1. 打开 Visio 2003/2007 2. 点击菜单[工具] -> [选项]: 3. 在弹出的“选项” 对话框中选择“高级”选项页: 4. 去掉“在同一窗口中打开每一 ShapeSheet ...
- VulnStack靶场实战(未完成)
环境搭建 https://www.cnblogs.com/HKCZ/p/11760213.html 信息收集 目录爆破 这里发现有phpmyadmin目录,这里可以直接获取webshell 参照: h ...
- 解决Linux下编译.sh文件报错 “[: XXXX: unexpected operator”
本人经常在Linux通过编译 .sh文件来生成工程,之前一直都没问题,代码一直都没变,但是今天编译的时候,却提示错误:
- python常用模块---collections、time、random、os、sys、序列号模块
collections模块 在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultdict. ...
- C#.NET动态页面静态化生成
一,动态页面生成静态也的思路是怎样呢? 1>首先我们都是需要有一个静态模板,这模板的作用就是静态页的最基本模板,如下代码: <!DOCTYPE HTML PUBLIC "-//W ...
- Python Web开发:使用Django框架创建HolleWorld项目
开发环境搭建 Python环境安装 下载地址:https://www.python.org/downloads// Django安装 打开Windows CMD输入pip install django ...
- quotacheck - 扫描文件系统,创建,检测并修补配额文件
总览(SYNOPSIS) quotacheck [ -agucfinvdFR ] filesystem 描述(DESCRIPTION) quotacheck 察看每一个文件系统,建立当前磁盘使用情况表 ...
- [BJOI2006]狼抓兔子(网络流)
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- Android kotlin静态属性、静态方法
只需要用 companion object 包裹相应代码块即可.以静态属性为例: class Constants { companion object { val BASE_URL = "h ...
- 【LeetCode】栈 stack(共40题)
[20]Valid Parentheses (2018年11月28日,复习, ko) 给了一个字符串判断是不是合法的括号配对. 题解:直接stack class Solution { public: ...