Java8Stream

目录

什么是Stream?

IO流:

Java8Stream:

什么是流?

stream图解

获取流

集合类,使用 Collection 接口下的 stream()

代码

数组类,使用 Arrays 中的 stream() 方法

代码

stream,使用 Stream 中的静态方法

代码

流操作

按步骤写

代码

链式调用

代码

运行

中间操作:

 API

代码 

运行

代码 

运行

代码

运行 

终端操作:

API

代码

运行

代码

运行

代码

运行

代码

运行

代码

运行

代码

运行


什么是Stream?

IO流:

输入输出文件的

Java8Stream:

处理数据集合(数组,集合类);

对数组,集合类 进行各种操作(过滤,排序......);

stream处理数据的大体过程:

数组/集合类-->流-->各种操作(排序,过滤...)-->结果。

什么是流?

数据和集合类更偏向于存储数据(各种结构);

stream更偏向于数据操作。

stream图解

获取流

获取流,把集合或者数组转化为stream对象。

集合类,使用 Collection 接口下的 stream()
代码
package com.ffyc.stream;

import java.util.ArrayList; 
import java.util.stream.Stream;

public class Demo1 {
    public static void main(String[] args) { 
        ArrayList<Integer> arrayList = new ArrayList<>();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);
        //把集合转为流
        Stream<Integer> stream = arrayList.stream(); 
    }
}
数组类,使用 Arrays 中的 stream() 方法
代码
package com.ffyc.stream; 

import java.util.Arrays;
import java.util.stream.IntStream; 

public class Demo1 {
    public static void main(String[] args) { 
        int[] array = new int[]{1,2,3,4};
        //把数组转为流
        IntStream intStream = Arrays.stream(array); 
    }
}
stream,使用 Stream 中的静态方法
代码
package com.ffyc.stream;

import java.util.stream.Stream;

public class Demo1 {
    public static void main(String[] args) { 
        Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);
    }
}

流操作

按步骤写
代码
package com.ffyc.stream;

 
import java.util.Arrays;
import java.util.stream.Stream;

public class Demo2 {
    public static void main(String[] args) {   
        Integer[] array = new Integer[]{1,2,3,4,5};
        Stream<Integer> stream = Arrays.stream(array);
        Stream stream1 = stream.filter();
        Stream stream2 = stream1.sorted();
    }
}
链式调用
代码
package com.ffyc.stream;


import java.util.Arrays;
import java.util.stream.Stream;

public class Demo2 {
    public static void main(String[] args) { 
        long sum = Arrays.stream(array)
                .sorted()
                .count();
    }
}
运行

中间操作:

流的各种数据处理

 API

filter:过滤流中的某些元素,
sorted(): 自然排序,流中元素需实现 Comparable 接口
distinct: 去除重复元素 

代码 
package com.ffyc.stream;


import java.util.Arrays; 

public class Demo2 {
    public static void main(String[] args) { 
        Integer[] array = new Integer[]{1,2,3,4,2,5}; 
        Arrays.stream(array)
                .filter((e)->{
                    return e<5;
                })
                .sorted((o1,o2)->{
                    return o2-o1;
                })
                .distinct()
                .forEach((e)->{
                    System.out.println(e);
                });
    }
}
运行

limit(n): 获取 n 个元素
skip(n): 跳过 n 元素,配合 limit(n)可实现分页

代码 
package com.ffyc.stream;


import java.util.Arrays; 

public class Demo2 {
    public static void main(String[] args) { 
        Integer[] array = new Integer[]{1,2,3,4,2,5}; 
        Arrays.stream(array)
                //跳过指定数量个元素
                .skip(2)
                //取出指定数量个元素
                .limit(2)
                .forEach((e)->{
                    System.out.println(e);
                }); 
    }
}
运行

map():将其映射成一个新的元素

代码
package com.ffyc.stream;
 

public class Student {
    private int num;
    private String name;
    private int age;

    public Student(int num, String name, int age) {
        this.num = num;
        this.name = name;
        this.age = age;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    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;
    }

    @Override
    public String toString() {
        return "Student{" +
                "num=" + num +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package com.ffyc.stream;

import java.util.ArrayList;
import java.util.Arrays; 
import java.util.Map;
import java.util.stream.Collectors;

public class Demo4 {
    public static void main(String[] args) {
        Student s1 = new Student(001,"张三",18);
        Student s2 = new Student(002,"李四",19);
        Student s3 = new Student(003,"王五",29);
        Student s4 = new Student(004,"王麻子",21);
        Student s5 = new Student(005,"丽丽",19);

        ArrayList<Student> students = new ArrayList<>();
        students.add(s3);
        students.add(s1);
        students.add(s2);
        students.add(s5);
        students.add(s4); 

        Object[] array = students.stream()
                .map((Student::getNum))//将对象中某个属性的值映射到一个新集合中
                .toArray();
        System.out.println(Arrays.toString(array));

        Map<Integer, String> map = students.stream()
                .collect(Collectors.toMap(Student::getNum, Student::getName));
        System.out.println(map);
    }
}
运行 

终端操作:

把流转为最终结果(数组/集合/单值)

API

Min:返回流中元素最小值
Max:返回流中元素最大值 

代码
package com.ffyc.stream;

import java.util.Arrays; 

public class Demo3 {
    public static void main(String[] args) { 
        Integer[] array = new Integer[]{1,2,3,4,2,5};
        Integer max = Arrays.stream(array)
                .distinct()
                .max((o1, o2) -> {//最大值
                    return o1 - o2;
                }).get();
        System.out.println(max);

        Integer min = Arrays.stream(array)
                .distinct()
                .min((o1, o2) -> {//最小值
                    return o1 - o2;
                }).get();
        System.out.println(min); 
}
运行

count:返回流中元素的总个数

代码
package com.ffyc.stream;

import java.util.Arrays; 

public class Demo3 {
    public static void main(String[] args) { 
        Integer[] array = new Integer[]{1,2,3,4,2,5}; 

        long count = Arrays.stream(array)
                .distinct()
                .count();//统计元素个数
        System.out.println(count); 
    }
}
运行

Reduce:所有元素求和

代码
package com.ffyc.stream;

import java.util.Arrays; 

public class Demo3 {
    public static void main(String[] args) { 
        Integer[] array = new Integer[]{1,2,3,4,2,5}; /

        long reduce = Arrays.stream(array)
                .distinct()
                .reduce((a,b)->{//求和
                    return a+b;
                }).get();
        System.out.println(reduce); 
    }
}
运行

anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足条件则返回 true,否则返回 false
allMatch:接收一个 Predicate 函数,当流中每个元素都符合条件时才返回 true,否则返回 false

代码
package com.ffyc.stream;

import java.util.Arrays; 

public class Demo3 {
    public static void main(String[] args) { 
        Integer[] array = new Integer[]{1,2,3,4,2,5}; 

        Boolean result1 = Arrays.stream(array)
                .distinct()
                .anyMatch((e)->{//只有有一个元素满足条件,返回true
                    return e>2;
                });
        System.out.println(result1);

        Boolean result2 = Arrays.stream(array)
                .distinct()
                .allMatch((e)->{//所有的条件都满足条件,返回true
                    return e>2;
                });
        System.out.println(result2); 
    }
}
运行

findFirst:返回流中第一个元素

代码
package com.ffyc.stream;

import java.util.Arrays; 

public class Demo3 {
    public static void main(String[] args) { 
        Integer[] array = new Integer[]{1,2,3,4,2,5}; 

        Integer result = Arrays.stream(array)
                .distinct()
                .findFirst()
                .get();
        System.out.println(result);
    }
}
运行

collect:将流中的元素倒入一个集合,Collection 或 Map

代码
package com.ffyc.stream;
 

public class Student {
    private int num;
    private String name;
    private int age;

    public Student(int num, String name, int age) {
        this.num = num;
        this.name = name;
        this.age = age;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    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;
    }

    @Override
    public String toString() {
        return "Student{" +
                "num=" + num +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
package com.ffyc.stream;

import java.util.ArrayList; 
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class Demo4 {
    public static void main(String[] args) {
        Student s1 = new Student(001,"张三",18);
        Student s2 = new Student(002,"李四",19);
        Student s3 = new Student(003,"王五",29);
        Student s4 = new Student(004,"王麻子",21);
        Student s5 = new Student(005,"丽丽",19);

        ArrayList<Student> students = new ArrayList<>();
        students.add(s3);
        students.add(s1);
        students.add(s2);
        students.add(s5);
        students.add(s4);

        List<Student> collect = students.stream()
                .sorted((a,b)->{ //对学生对象集合进行排序,必须给定排序的规则
                    return a.getNum()-b.getNum();
                })
                .collect(Collectors.toList());
        System.out.println(collect);

        List<Student> res = students.stream()
                .filter((stu) -> {
                  return  stu.getAge()>18;
                })
                .collect(Collectors.toList());
        System.out.println(res);

        List<Integer> list = students.stream()
                .map(Student::getNum)
                .collect(Collectors.toList());
        System.out.println(list);
    }
}
运行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/645339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

牛客网刷题 | BC100 直角三角形图案

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 KiKi学习了循环&am…

注意力机制篇 | YOLOv8改进之引入用于目标检测的混合局部通道注意力MLCA

前言:Hello大家好,我是小哥谈。注意力机制是可以帮助神经网络突出重要元素,抑制无关元素。然而,绝大多数通道注意力机制只包含通道特征信息,忽略了空间特征信息,导致模型表示效果或目标检测性能较差,且空间注意模块往往较为复杂。为了在性能和复杂性之间取得平衡,本文提…

AI遇上遥感,未来会怎样?

随着航空、航天、近地空间等多个遥感平台的不断发展&#xff0c;近年来遥感技术突飞猛进。由此&#xff0c;遥感数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量也大幅增长&#xff0c;使其越来越具有大数据特征。对于相关研究而言&#xff0c;遥感大数据的出现为其提…

C++基础与深度解析 | 泛型算法 | bind | Lambda表达式

文章目录 一、泛型算法1.泛型算法的分类2.迭代器分类 二、bind与lambda表达式1.bind2.lambda表达式 三、泛型算法的改进--ranges(c20) 一、泛型算法 C中的泛型算法是标准模板库&#xff08;STL&#xff09;的一部分&#xff08;这里重点讨论 C 标准库中定义的算法&#xff0c;而…

5.25机器人基础-空间描述和变换1

参考资料&#xff1a;《机器人学导论》John.J.Craig 彻底搞懂“旋转矩阵/欧拉角/四元数”&#xff0c;让你体会三维旋转之美_欧拉角判断动作-CSDN博客 机器人操作的定义是指通过某种机构使零件和工具在空间运动。因此&#xff0c;对于坐标系的定义显得尤为重要&#xff0c;相…

模型评价指标笔记:混淆矩阵+F1+PR曲线+mAP

评价指标 二分类评价指标 混淆矩阵 TP: 正确预测为了正样本&#xff0c;原来也是正样本 FN: 错误的预测为负样本&#xff0c;原来是正样本 (漏报&#xff0c;没有找到正确匹配的数目) FP: 错误的预测为正样本&#xff0c;原来是负样本 (误报&#xff0c;没有的匹配不正确) TN…

Rust腐蚀怎么用服务器一键开服联机教程

1、进入控制面板 首次登陆需要点击下方重置密码&#xff0c;如何再点击登录面板&#xff0c;点击后会跳转到登录页面&#xff0c;输入用户名和密码登录即可 2、设置游戏端口 由于腐蚀的设置需要三个端口&#xff0c;它们用于游戏端口&#xff08;必须为首选端口&#xff09;&a…

springboot3微服务下结合springsecurity的认证授权实现

1. 简介 在微服务架构中&#xff0c;系统被拆分成许多小型、独立的服务&#xff0c;每个服务负责一个功能模块。这种架构风格带来了一系列的优势&#xff0c;如服务的独立性、弹性、可伸缩性等。然而&#xff0c;它也带来了一些挑战&#xff0c;特别是在安全性方面。这时候就体…

HTML跳动的爱心

目录 写在前面 HTML简介 跳动的爱心 代码分析 运行结果 推荐文章 写在后面 写在前面 哎呀&#xff0c;这是谁的小心心&#xff1f;跳得好快吖&#xff01; HTML简介 老生常谈啦&#xff0c;咱们还是从HTML开始吧&#xff01; HTML是超文本标记语言&#xff08;Hyper…

数据结构--二叉搜索树

目录 二叉搜索树的概念 二叉树的实现 结点类 函数接口总览 实现二叉树 二叉搜索树的应用 K模型 KV模型 二叉搜索树的性能分析 二叉搜索树的概念 二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称BST&#xff09;是一种特殊的二叉树&#xff0c;其具有以下几…

Installing Tinyproxy on CentOS 7 测试可用

Installing Tinyproxy on CentOS 7 For RHEL/CentOS 7 systems, Tinyproxy is part of EPEL (Extra Packages for Enterprise Linux). Install EPEL on CentOS 7 yum install epel-release -y yum update -y Install Tinyproxy on CentOS 7 yum install tinyproxy -y 编辑…

重开之数据结构(二刷)

引言: 由于前段时间学习效率不高,导致后面复习前面数据结构没有一个大纲,因此打算重新来学习以下数据结构,期望再次把数据结构学透,并有深刻的印象.并且记录每一次的学习记录 以便于后续复习 二分查找 需求:在有序数组arr内,查找target值 如果找到返回索引位置如果找不到返回…

使用python对指定文件夹下的pdf文件进行合并

使用python对指定文件夹下的pdf文件进行合并 介绍效果代码 介绍 对指定文件夹下的所有pdf文件进行合并成一个pdf文件。 效果 要合并的pdf文件&#xff0c;共计16个1页的pdf文件。 合并成功的pdf文件&#xff1a;一个16页的pdf文件。 代码 import os from PyPDF2 import …

3款简洁个人网站引导页(附带源码)

3款个人网站引导页 效果图及部分源码1.个人页2.引导页3.导航页 领取源码下期更新预报 效果图及部分源码 1.个人页 部分源码 * {margin: 0;padding: 0; }body {background-image: linear-gradient(to left, rgba(255, 0, 149, 0.2), rgba(0, 247, 255, 0.2)), url(../img/bg.j…

贪心算法4(c++)

过河的最短时间 题目描述 输入 在漆黑的夜里&#xff0c;N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话&#xff0c;大家是无论如何也不敢过桥去的。不幸的是&#xff0c;N个人一共只带了一只手电筒&#xff0c;而桥窄得只够让两个人同时过&#xff0c;如果…

Spark搭建 Standalone模式详细步骤

Standalone模式概述&#xff1a; Standalone模式是Spark自带的一种集群模式&#xff08;本地集群&#xff0c;不依赖与外部集群&#xff0c;比如Yarn&#xff09;&#xff0c;可以真实地在多个机器之间搭建Spark集群的环境。 Standalone是完整的Spark运行环境,其中: Master角…

QGraphicsView实现简易地图16『爆炸效果』

前文链接&#xff1a;QGraphicsView实现简易地图15『测量面积』 一种简单的爆炸波扩散效果 动态演示效果&#xff1a; 静态展示图片&#xff1a; 核心代码&#xff1a; #pragma once #include "../AbstractGeoItem.h" #include "DataStruct/GeoData.h"…

Minecraft服务器如何搭建

Minecraft这是原版英文名称&#xff0c;在中国大陆被译为《我的世界》&#xff0c;这款游戏很火爆。台湾的很多小伙伴也在玩&#xff0c;其译名为《我的创世神》。现在这款游戏在国内已经被网易代理了。因为这款游戏开源&#xff0c;所以任何人都可以搭建服务器端&#xff0c;如…

Aloha机械臂的mujoco仿真问题记录

今天在测试ACT代码时&#xff0c;遇到了仿真中的机械臂无法摆放正确的姿势来抓去红色方块。 后来经过测试&#xff0c;发现应该是python包的版本问题有误&#xff0c;下面记录下正确的包版本&#xff1a; 官方给出的包&#xff1a; conda create -n aloha python3.8.10 conda…

LearnOpenGL(二十)之立方体贴图

一、创建立方体贴图 首先&#xff0c;生成一个纹理&#xff0c;并将其绑定到纹理目标GL_TEXTURE_CUBE_MAP&#xff1a; unsigned int textureID; glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_CUBE_MAP, textureID); 因为立方体贴图包含有6个纹理&#xff0…