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. Vagrant 手册之 Vagrantfile - 提示及技巧

    原文地址 Vagrantfile 是一种非常灵活的配置格式.语法基于 Ruby,可以用它做很多事情.在本页使用一些提示和技巧时,请注意正确使用它们. 1. 使用循环定义虚拟机 如果你想对多机器应用稍微 ...

  2. TensorFlow学习笔记3-从MNIST开始

    TensorFlow学习笔记3-从MNIST开始学习softmax 本笔记内容为"从MNIST学习softmax regression算法的实现". 注意:由于我学习机器学习及之前 ...

  3. telnet批量检测端口状态(linux)

    批量检测端口通信: 准备文件树状图 telnet.sh 脚本内容如下: 文件说明 telnet_alive.txt  : 活动的端口 telnet_die.txt    :  离线的端口 telnet ...

  4. django的orm操作优化

    django的orm操作优化 models.py from django.db import models class Author(models.Model): name = models.Char ...

  5. NGUI的窗体的推动和调节大小(drag object和drag resize object)

    一,我们先添加一个sprite,给sprite添加一个背景图片,然后attach添加一个box Collider,但是这时我们右键attach是找不到drag object的我们需要在add comp ...

  6. idea 创建 SSM + maven Java Web 项目流程

    idea 创建 SSM + maven Java Web 项目流程 一.idea 中选择File,New Project 新建项目 二.选择Maven,勾选上面的Create from archety ...

  7. 3.Web中使用iReport 整合----------创建PDF格式的

    转自:https://wenku.baidu.com/view/104156f9770bf78a65295462.html 1.

  8. 134-基于TMS320C6678、FPGA XC5VSX95T的一路Full模式Camera Link图像理平台

    基于TMS320C6678.FPGA XC5VSX95T的一路Full模式Camera Link图像理平台 一.板卡概述 该板卡采用TI公司新一代DSP TMS320C6678,结合FPGA,型号为X ...

  9. Codecraft-17 and Codeforces Round #391 - B

    题目链接:http://codeforces.com/contest/757/problem/B 题意:给定n个数字,问最多能选个多少个数字使得选出来的数字的gcd!=1. 思路:由于数字最大为1e5 ...

  10. springboot打包成jar文件无法正常运行,解决办法已经找到

    1.用intellij idea 创建了一个springboot的项目,前期都运行的好好的,在ide中可以正常运行,但是打包成Jar运行却一直报错. 2.经过不懈探索,终于找到解决办法 3.首先,找到 ...