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流式计算的操作的更多相关文章

  1. 第46天学习打卡(四大函数式接口 Stream流式计算 ForkJoin 异步回调 JMM Volatile)

    小结与扩展 池的最大的大小如何去设置! 了解:IO密集型,CPU密集型:(调优)  //1.CPU密集型 几核就是几个线程 可以保持效率最高 //2.IO密集型判断你的程序中十分耗IO的线程,只要大于 ...

  2. Stream流式计算

    Stream流式计算 集合/数据库用来进行数据的存储 而计算则交给流 /** * 现有5个用户,用一行代码 ,一分钟按以下条件筛选出指定用户 *1.ID必须是偶数 *2.年龄必须大于22 *3.用户名 ...

  3. JUC(8)Stream流式计算

    文章目录 1.ForkJoin 1.ForkJoin ForkJoin 在JDK1.7 ,并执行任务!提高效率,大数据量 大数据:Map Reduce (把大任务拆分为小任务) ForkJoin特点: ...

  4. 流式计算(三)-Flink Stream 篇一

    原创文章,谢绝任何形式转载,否则追究法律责任! ​流的世界,有点乱,群雄逐鹿,流实在太多,看完这个马上又冒出一个,也不知哪个才是真正的牛,据说Flink是位重量级选手,能流计算,还能批处理, 和其他伙 ...

  5. 流式计算(二)-Kafka Stream

    前面说了Java8的流,这里还说流处理,既然是流,比如水流车流,肯定得有流的源头,源可以有多种,可以自建,也可以从应用端获取,今天就拿非常经典的Kafka做源头来说事,比如要来一套应用日志实时分析框架 ...

  6. 流式计算新贵Kafka Stream设计详解--转

    原文地址:https://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653162822&idx=1&sn=8c4611436 ...

  7. Java的Stream流式操作

    前言 最近在实习,在公司看到前辈的一些代码,发现有很多值得我学习的地方,其中有一部分就是对集合使用Stream流式操作,觉得很优美且方便.所以学习一下Stream流,在这里记录一下. Stream是什 ...

  8. Java8——Stream流式操作的一点小总结

    我发现,自从我学了Stream流式操作之后,工作中使用到的频率还是挺高的,因为stream配合着lambda表达式或者双冒号(::)使用真的是优雅到了极致!今天就简单分(搬)享(运)一下我对strea ...

  9. Java8中的Stream流式操作 - 入门篇

    作者:汤圆 个人博客:javalover.cc 前言 之前总是朋友朋友的叫,感觉有套近乎的嫌疑,所以后面还是给大家改个称呼吧 因为大家是来看东西的,所以暂且叫做官人吧(灵感来自于民间流传的四大名著之一 ...

随机推荐

  1. (appium+python)UI自动化_07_app UI自动化实例【叮咚搜索加车为例】

    前言 初学UI自动化的小伙伴,在配置好appium+python自动化环境后,往往不知道如何下手实现自动化.小编在初期学习的时候也有这种疑惑,在此以叮咚买菜app-搜索加车为实例,展示下appium是 ...

  2. 28. Jmeter函数

    Jmeter函数传送门 软件测试汪简书地址 软件测试汪博客地址 欢迎关注微信公众号:软件测试汪.软件测试交流群:809111560 转载请注意出处,谢谢合作

  3. jQuery防止中文乱码

    window.location.href = "?supplier=" + escape($("#ddlUser").val()) + "&t ...

  4. Linux:VIM简单入手

    现在的Linux系统一般都会默认安装VIM编辑器,如果没有安装VIM编辑器,也默认一定会有VI编辑器,VI编辑器产生的时间比鼠标来的更早,虽然功能很强大,但我建议安装VIM工具,安装了VIM之后,VI ...

  5. CentOS vim的使用

    安装vim工具 [root@bogon ~]# yum install -y vim-enhanced 卸载vim工具 [root@bogon ~]# yum remove -y vim* vim常用 ...

  6. luogu P3657 (NOIP2017) 跳房子(二分+DP+单调队列)

    题面 传送门 分析 显然答案有单调性,可以二分答案,设当前二分值为g,根据题意我们可以求出跳跃长度的范围[l,r] 考虑DP 子状态: dp[i]表示跳到第i个点时的最大和 状态转移方程 \(dp[i ...

  7. P2737 [USACO4.1]麦香牛块Beef McNuggets

    题目描述 农夫布朗的奶牛们正在进行斗争,因为它们听说麦当劳正在考虑引进一种新产品:麦香牛块.奶牛们正在想尽一切办法让这种可怕的设想泡汤.奶牛们进行斗争的策略之一是“劣质的包装”.“看,”奶牛们说,“如 ...

  8. hdu6333 Problem B. Harvest of Apples(组合数+莫队)

    hdu6333 Problem B. Harvest of Apples 题目传送门 题意: 求(0,n)~(m,n)组合数之和 题解: C(n,m)=C(n-1,m-1)+C(n-1,m)    设 ...

  9. Linux常用命令操作文档

    Ls命令:列出目录内容 选项 长选项 含义 -a --all 列出所有文件,包括隐藏的文件 -d --directory 指定一个目录 -F --classify 在每个列出的名字后面加上类型指示符( ...

  10. JavaScript 各种遍历方式详解及总结

    JavaScript 各种遍历方式详解 在$.each中想要终止循环,但是它没有continue或者break这样的终止方式,所以尝试使用return来进行终止,但是发现并没有跳出循环.为了搞清楚js ...