哈喽!大家好,我是【学无止境小奇】,一位热爱分享各种技术的博主!



【学无止境小奇】的创作宗旨:每一条命令都亲自执行过,每一行代码都实际运行过,每一种方法都真实实践过,每一篇文章都良心制作过。



【学无止境小奇】的博客中所有涉及命令、代码的地方,除了提供图片供大家参考,另外会在图片下方提供一份纯文本格式的命令或者代码方便大家粘贴复制直接执行命令或者运行代码。



如果你对技术有着浓厚的兴趣,欢迎关注【学无止境小奇】,欢迎大家和我一起交流。



️️️感谢各位朋友接下来的阅读️️️

@

一、前期准备

1、创建对象

1.1、Student

public class Student {
private int id;
private String name;
private String sex;
private int age; public Student(int id, String name, String sex, int age) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} @Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}

2、初始化数据

2.1、初始化集合

public class StreamTest {
List<Student> studentList = Arrays.asList(
new Student(1,"张三","男",20),
new Student(2,"李四","男",25),
new Student(3,"王五","女",18),
new Student(4,"赵六","女",26)
);
}

二、Stream常用操作方式

1、筛选

1.1、filter

filter从集合中过滤某些元素,例如查询集合中年龄大于20的数据集合

        //查询年龄大于20的数据集合
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.collect(Collectors.toList());

1.2、limit

limit,和mysql中的limit类似,返回指定数量的数据

        //查询年龄大于20的1个数据
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.limit(1)
.collect(Collectors.toList());

1.3、skip

skip,跳过元素,返回一个跳过前n个元素的集合

        //查询年龄大于20的数据,前一个不要
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.skip(1)
.collect(Collectors.toList());

1.4、distinct

distinct,筛选,通过元素的hashCode()和equals()去除重复元素

        //查询年龄大于20的数据,并去重
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.distinct()
.collect(Collectors.toList());

2、映射

2.1、map

map,将集合元素转换成其他形式返回,接收一个函数作为参数,该函数作用到每一个元素上,并将其映射成一个新的元素

        //查询年龄大于20的数据,只获取姓名集合
List<String> list = studentList.stream()
.filter(s -> s.getAge()>20)
.map(Student::getName)
.collect(Collectors.toList());

3、排序

3.1、sorted()

sorted()自然排序

    //查询年龄大于20的数据,只获取姓名,并排序
List<String> list = studentList.stream()
.filter(s -> s.getAge()>20)
.map(Student::getName)
.sorted()
.collect(Collectors.toList());

3.2、sorted(Comparator com)定制排序

sorted(Comparator com)定制排序,定制输入排序规则

//查询年龄大于20的数据,并根据姓名排序
List<Student> list = studentList.stream()
.filter(s -> s.getAge()>20)
.sorted((e1,e2) -> {
return e1.getName().compareTo(e2.getName());
})
.collect(Collectors.toList());

4、查找与匹配

4.1、allMatch

allMatch检查是否匹配所有元素

//判断集合中所有的姓名是否都等于"张三"
boolean flag = studentList.stream()
.allMatch((e) -> e.getName().equals("张三"));

4.2、anyMatch

anyMatch是否匹配至少一个元素

        //判断集合中是否至少有一个姓名等于"张三"
boolean flag = studentList.stream()
.anyMatch((e) -> e.getName().equals("张三"));

4.3、noneMatch

noneMatch检查是否没有匹配所有元素

//判断集合中是否没有匹配所有元素姓名等于"张三"
boolean flag = studentList.stream()
.noneMatch((e) -> e.getName().equals("张三"));

4.4、findFirst

findFirst返回第一个元素

//返回集合中第一个元素
Optional<Student> student = studentList.stream()
.findFirst();

4.5、findAny

findAny返回当前集合中的任意元素

//返回集合中任意一个元素
Optional<Student> student = studentList.stream()
.findAny();

4.6、conut

conut返回流中元素的总个数

        //返回集合的数量
long num = studentList.stream()
.count();

4.7、max

返回流中最大值

        //返回集合中年龄最大的一条数据
Optional<Student> student = studentList.stream()
.max((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge()));

4.8、min

返回流中最小值

        //返回集合中年龄最大的一条数据
Optional<Student> student = studentList.stream()
.min((e1,e2) -> Integer.compare(e1.getAge(),e2.getAge()));

Java8之Stream常用操作方式的更多相关文章

  1. Java8的Stream API使用

    前言 这次想介绍一下Java Stream的API使用,最近在做一个新的项目,然后终于可以从老项目的祖传代码坑里跳出来了.项目用公司自己的框架搭建完成后,我就想着把JDK版本也升级一下吧(之前的项目, ...

  2. Java8使用Stream优雅地处理集合

    说明 集合和数组是我们经常会用到的数据结构,在jdk1.8之前,集合和数组的处理并不是很便捷.但是到了JDK1.8之后,使用Stream处理集合会使代码变得更加的简洁明了.作为一名开发者,其实很有必要 ...

  3. Stream常用操作以及原理探索

    Stream常用操作以及原理 Stream是什么? Stream是一个高级迭代器,它不是数据结构,不能存储数据.它可以用来实现内部迭代,内部迭代相比平常的外部迭代,它可以实现并行求值(高效,外部迭代要 ...

  4. Java8的Stream方法findAny空指针异常(NullPointerException)实例对比

    实战介绍 学习完Java8的Stream方法,可能你正准备大展身手,却发现遇到不少问题,本篇文章为大家带来一个findAny方法抛出java.lang.NullPointerException的场景. ...

  5. java8的stream功能及常用方法

    Java8中stream对集合操作做了简化,用stream操作集合能极大程度简化代码.Stream 就如同一个迭代器(Iterator),单向,不可往复,数据只能遍历一次,遍历过一次后就用尽了. 一. ...

  6. Java8 Lambda/Stream使用说明

    一.Stream流1. 流的基本概念 1.1 什么是流?流是Java8引入的全新概念,它用来处理集合中的数据,暂且可以把它理解为一种高级集合.众所周知,集合操作非常麻烦,若要对集合进行筛选.投影,需要 ...

  7. Java8的Stream语法详解(转载)

    1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...

  8. Java8的Stream流(一) --- 基础用法

    Java8中的Stream Stream使用一种类似用SQL语句从数据库查询数据的直观方式来提供一种对Java集合运算和表达的高阶抽象. Stream的特性及优点: 无存储. Stream不是一种数据 ...

  9. Java8之Stream/Map

    本篇用代码示例结合JDk源码讲了Java8引入的工具接口Stream以及新Map接口提供的常用默认方法.    参考:http://winterbe.com/posts/2014/03/16/java ...

随机推荐

  1. 【Java笔记】applet和html注意

    1.首先记得extends Applet 泪目 2.如果不分包,HTML可以写 <applet code="HelloWorldApplet.class" width=150 ...

  2. [Opencv]几种对轮廓的处理方式

    boundingRect() 作用:计算点集的右上边框. 形式:boundingRect(InputArray points): 参数:points:输入二维点集,并用std::vector or M ...

  3. JDK中的BitMap实现之BitSet源码分析

    前提 本文主要内容是分析JDK中的BitMap实现之java.util.BitSet的源码实现,基于JDK11编写,其他版本的JDK不一定合适. 文中的图比特低位实际应该是在右边,但是为了提高阅读体验 ...

  4. svn钩子脚本

      使用钩子脚本的意义: 我们在测试环境中搭建好svn后,开发人员可以正常的上传和下载写好的代码了.但是上传到测试服务器,在版本库中(tshop)是看不到这些数据的.所以在测试环境中(linux测试服 ...

  5. 初识python: 反射

    反射:通过字符串映射或修改程序运行时的状态.属性.方法 反射有以下三个方法: hasattr(object, name)           判断一个对象(object)里是否有对应的字符串(name ...

  6. 初识python:高阶函数(附-高阶函数)

    定义: 变量可以指向函数,函数的参数能接收变量,那么,一个函数可以接收另一个函数作为参数,这种函数就称之为高阶函数. 简单说就是:把函数当作参数传递的函数就是高阶函数 特性 1.把一个函数名当作实参传 ...

  7. Selenium_界面的刷新、后退、前进操作(4)

    import time from selenium import webdriver driver = webdriver.Chrome() driver.maximize_window() driv ...

  8. mysql 的 limit 与sql server 的 top n

    1.东西学多了,难免会混淆 貌似没有错,但是mysql不支持 top n 语法 而是使用 limit n 或 limit n , m 2.   top n 语法 是SQL server 的

  9. js对cookie的操作:读、写、删

    js读写cookie //JS操作cookies方法!//写cookiesfunction setCookie(name,value){var Days = 30;var exp = new Date ...

  10. 使用 arguments 对象

    arguments 对象表示参数集合,它是一个伪类数组,拥有与数组相似的结构,可以通过数组下标的形式访问函数实参值,但是没有基础 Array 的原型方法. //函数没有定义形参,但是在函数体内通过 a ...