参考博客: https://www.jianshu.com/p/9fe8632d0bc2

Stream简介

  • Java 8引入了全新的Stream API。这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同。
  • stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。
  • 只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字符串的首字母”等,Stream 会隐式地在内部进行遍历,做出相应的数据转换。

为什么要使用Stream

  • 函数式编程带来的好处尤为明显。这种代码更多地表达了业务逻辑的意图,而不是它的实现机制。易读的代码也易于维护、更可靠、更不容易出错。
  • 高端

有关List的操作,这里介绍一下stream的用法.

给出Person的代码, 就是基本的get和set方法.

package com.demo;

public class Person {

    private String name;
private int age;
private String province; public Person(String name, int age, String province) {
this.name = name;
this.age = age;
this.province = province;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
} }

这里给出Main方法的代码:

package com.demo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream; public class Test { public static void main(String[] args) { List<Person> list = new ArrayList<Person>(); Person p1 = new Person("a", 11, "aaaaa");
Person p2 = new Person("b", 12, "bbbbb");
Person p3 = new Person("c", 13, "ccccc");
Person p4 = new Person("d", 14, "ddddd");
Person p5 = new Person("e", 15, "eeeee"); list = Arrays.asList(p1, p2, p3, p4, p5);
filterTest(list);
mapTest(list);
flatMapTest(list);
reduceTest();
collectTest(list);
} private static void println(List<Person> list) {
for(Person p:list) {
System.out.println(p.getName()+"-"+p.getAge()+"-"+p.getProvince());
}
} // filter age > 13 and name = d
private static void filterTest(List<Person> list) {
List<Person> temp = new ArrayList<Person>();
for(Person p:list) {
if (p.getAge() > 13 && "d".equalsIgnoreCase(p.getName())) {
temp.add(p);
}
}
println(temp); List<Person> collect = list
.stream()
.filter(p->(p.getAge() > 13 && "d".equalsIgnoreCase(p.getName())))
.collect(Collectors.toList());
println(collect); List<Person> collect1 = list
.stream()
.filter(p->{
if (p.getAge() > 13 && "d".equalsIgnoreCase(p.getName())) {
return true;
}
return false;
})
.collect(Collectors.toList());
println(collect1);
} // map
private static void mapTest(List<Person> list) {
List<String> temp = new ArrayList<>();
for(Person p:list) {
temp.add(p.getName());
}
System.out.println("temp="+temp.toString()); List<String> collect = list
.stream()
.map(p->p.getName())
.collect(Collectors.toList());
System.out.println("collect="+collect); List<String> collect1 = list
.stream()
.map(Person::getName)
.collect(Collectors.toList());
System.out.println("collect1="+collect1); List<String> collect2 = list
.stream()
.map(p->{
return p.getName();
}).collect(Collectors.toList());
System.out.println("collect2="+collect2);
} // flatMap
private static void flatMapTest(List<Person> list) {
List<String> collect = list
.stream()
.flatMap(person -> Arrays.stream(person.getName().split(" ")))
.collect(Collectors.toList());
System.out.println("collect="+collect); List<Stream<String>> collect1 = list
.stream()
.map(person -> Arrays.stream(person.getName().split(" ")))
.collect(Collectors.toList());
System.out.println("collect1="+collect1); List<String> collect2 = list
.stream()
.map(person -> person.getName().split(" "))
.flatMap(Arrays::stream)
.collect(Collectors.toList());
System.out.println("collect2="+collect2); List<String> collect3 = list
.stream()
.map(person -> person.getName().split(" "))
.flatMap(str -> Arrays.asList(str).stream())
.collect(Collectors.toList());
System.out.println("collect3="+collect3);
} // reduce
public static void reduceTest(){
Integer reduce = Stream.of(1, 2, 3, 4)
.reduce(10, (count, item) ->{
System.out.println("count:"+count);
System.out.println("item:"+item);
return count + item;
} );
System.out.println(reduce); Integer reduce1 = Stream.of(1, 2, 3, 4)
.reduce(1, (x, y) -> x + y);
System.out.println(reduce1); String reduce2 = Stream.of("1", "2", "3")
.reduce("1", (x, y) -> (x + "," + y));
System.out.println(reduce2);
} /**
* toList
*/
public static void collectTest(List<Person> list){
List<String> collect = list.stream()
.map(Person::getName)
.collect(Collectors.toList()); Set<String> collect1 = list.stream()
.map(Person::getName)
.collect(Collectors.toSet()); Map<String, Integer> collect2 = list.stream()
.collect(Collectors.toMap(Person::getName, Person::getAge));
Map<String, String> collect3 = list.stream()
.collect(Collectors.toMap(p->p.getName(), value->{
return value+"1";
}));
for (Map.Entry<String, String> entry : collect3.entrySet()) {
System.out.println("key=" + entry.getKey() + ",value=" + entry.getValue());
} //TreeSet<Person> collect4 = list.stream()
// .collect(Collectors.toCollection(TreeSet::new));
//System.out.println(collect4); Map<Boolean, List<Person>> collect5 = list.stream()
.collect(Collectors.groupingBy(p->"d".equalsIgnoreCase(p.getName())));
System.out.println(collect5); String collect6 = list.stream()
.map(p->p.getName())
.collect(Collectors.joining(",", "{", "}"));
System.out.println(collect6); List<String> collect7 = Stream.of("1", "2", "3").collect(
Collectors.reducing(new ArrayList<String>(), x -> Arrays.asList(x), (y, z) -> {
y.addAll(z);
return y;
}));
System.out.println(collect7);
} }

下面是运行的依次结果:

d-14-ddddd
d-14-ddddd
d-14-ddddd
temp=[a, b, c, d, e]
collect=[a, b, c, d, e]
collect1=[a, b, c, d, e]
collect2=[a, b, c, d, e]
collect=[a, b, c, d, e]
collect1=[java.util.stream.ReferencePipeline$Head@7cca494b, java.util.stream.ReferencePipeline$Head@7ba4f24f, java.util.stream.ReferencePipeline$Head@3b9a45b3, java.util.stream.ReferencePipeline$Head@7699a589, java.util.stream.ReferencePipeline$Head@58372a00]
collect2=[a, b, c, d, e]
collect3=[a, b, c, d, e]
count:10
item:1
count:11
item:2
count:13
item:3
count:16
item:4
20
11
1,1,2,3
key=a,value=com.demo.Person@1e80bfe81
key=b,value=com.demo.Person@66a298841
key=c,value=com.demo.Person@4769b07b1
key=d,value=com.demo.Person@cc34f4d1
key=e,value=com.demo.Person@17a7cec21
{false=[com.demo.Person@1e80bfe8, com.demo.Person@66a29884, com.demo.Person@4769b07b, com.demo.Person@17a7cec2], true=[com.demo.Person@cc34f4d]}
{a,b,c,d,e}
[1, 2, 3]

待续...

Java有关List的stream基本操作的更多相关文章

  1. 使用Java 8中的Stream

    Stream是Java 8 提供的高效操作集合类(Collection)数据的API. 1. 从Iterator到Stream 有一个字符串的list,要统计其中长度大于7的字符串的数量,用迭代来实现 ...

  2. Java 8系列之Stream的基本语法详解

    本文转至:https://blog.csdn.net/io_field/article/details/54971761 Stream系列: Java 8系列之Stream的基本语法详解 Java 8 ...

  3. java.io.StreamCorruptedException: invalid stream header: EFBFBDEF 问题解决

    错误方式 @Test public void testDeserializeTest() throws IOException, ClassNotFoundException { ByteArrayO ...

  4. Java 8 – Convert a Stream to LIST

    Java 8 – Convert a Stream to LIST package com.mkyong.java8; import java.util.List;import java.util.s ...

  5. Java使用Optional与Stream来取代if判空逻辑(JDK8以上)

    Java使用Optional与Stream来取代if判空逻辑(JDK8以上) 通过本文你可以用非常简短的代码替代业务逻辑中的判null校验,并且很容易的在出现空指针的时候进行打日志或其他操作. 注:如 ...

  6. java.io.StreamCorruptedException: invalid stream header: 00000000

    Caused by: java.io.StreamCorruptedException: invalid stream header: 00000000 at java.io.ObjectInputS ...

  7. Kubernetes官方java客户端之六:OpenAPI基本操作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. 关于JAVA中顺序IO的基本操作

    关于JAVA中顺序IO的基本操作 写在前面 最近研究一下JAVA中的顺序IO,在网络上找了一会儿,发现少有详细的介绍,顾此在此处说说顺序IO,才学疏浅,如有不对,望赐教. 什么是顺序IO 事实上JAV ...

  9. # java对xml文件的基本操作

    下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...

随机推荐

  1. Entity Framework Code-First(2):What is Code-First?

    What is Code-First?: Entity Framework introduced Code-First approach from Entity Framework 4.1. Code ...

  2. JavaScript中函数作为值

    function myfunc() { // .. } 这是个函数,这样理解, myfunc只是外层作用域的一个变量,指向刚刚声明的function. 也就是说,function本身就是一个值, 就像 ...

  3. e.key && e.which && e.keyCode

    官方推荐用e.key来描述状态码,其他两种属性可能会在未来被废弃. 且key,keyCode和which 为只读属性   但是会有浏览器兼容性的问题,可以采用如下代码:   let key = ''; ...

  4. 修改TABLE中的Column的属性

    删除主键名 这个主键名并不是列名,而是主键约束的名字,如果当时设置主键约束时没有制定约束的名字 设置主键的语句:ALTER TABLE P add constraint pk PRIMARY KEY ...

  5. java线程基础知识----线程基础知识

    不知道从什么时候开始,学习知识变成了一个短期记忆的过程,总是容易忘记自己当初学懂的知识(fuck!),不知道是自己没有经常使用还是当初理解的不够深入.今天准备再对java的线程进行一下系统的学习,希望 ...

  6. Fiddler开启Https的时候出现unable to configure windows to trust Fiddler Root certificate问题

    前言 通过log页面看到错误为:访问控制列表(ACL)结构无效. 网上(baidu,bing,google)各种方式都试过了: 如重置证书(Reset all certificates) 导出证书到本 ...

  7. SQL Server 练习

    use master if exists(select * from sys.databases where name='db_Test') drop database db_Test go crea ...

  8. sg函数和nim游戏的关系

    sg函数和nim游戏的关系 本人萌新,文章如有错漏请多多指教-- 我在前面发了关于nim游戏的内容,也就是说给n堆个数不同的石子,每次在某个堆中取任意个数石子,不能取了就输了.问你先手是否必胜.然后只 ...

  9. 洛谷P1378 油滴扩展

    P1378 油滴扩展 题目描述 在一个长方形框子里,最多有N(0≤N≤6)个相异的点,在其中任何一个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完 ...

  10. Hadoop 3.0完全分布式集群搭建方法(CentOS 7+Hadoop 3.2.0)

    本文详细介绍搭建4个节点的完全分布式Hadoop集群的方法,Linux系统版本是CentOS 7,Hadoop版本是3.2.0,JDK版本是1.8. 一.准备环境 1. 在VMware worksta ...