JDK8新特性之Stream流

2023-11-04

目录

一、简介

二、Stream流的应用

2.1 为什么使用stream流

2.2 Stream流的原理

 2.3 步骤

 2.4 获取Stream流对象的方式

2.5 Stream流的API方法

2.5.1 map

2.5.2 collect 收集

2.5.3  sorted 排序

2.5.4 reduce 规约

2.5.5 findFirst 查询第一个


一、简介

Java8的两个重大改变,一个是Lambda表达式,另一个就是本节要讲的Stream API表达式。Stream 是Java8中处理集合的关键抽象概念,它可以对集合进行非常复杂的查找、过滤、筛选等操作

二、Stream流的应用

2.1 为什么使用stream流

当我们对集合中的元素进行操作的时候,除了必须的添加、删除、获取外,最典型的就是集合遍历。我们可以来展示一下集合操作数据的弊端,需求如下:

需求:

        一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,孙悟空,张三丰,张三
        1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据

package demo01;

import java.util.ArrayList;
import java.util.List;

/**
 * @author huihui
 * @Project jdk8_stream
 * @date 2023/6/14 14:28
 */
public class Test {
    //        一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,孙悟空,张三丰,张三
    //        需求:1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("孙悟空");
        list.add("张三丰");
        list.add("张三");

        //1. 拿到所有姓张的人名
        List<String> newList01 = new ArrayList<>();
        for (String s : list) {
            if(s.startsWith("张")){//startsWith--以...开头
                newList01.add(s);
            }
        }

        //2.拿到名字长度为3个字的
        ArrayList<String> newList02 = new ArrayList<>();
        for (String s : newList01) {
            if(s.length()==3){
                newList02.add(s);
            }
        }

        //3.打印这些数据
        for (String s : newList02) {
            System.out.println(s);
        }
    }
}

分析:

循环遍历的弊端

这段代码中含有三个循环,每一个的作业都不同

        1.首先筛选张姓的人

        2.然后筛选名字有三个字的人

        3.最后进行对结果进行打印输出

每当我们需要对集合中的元素进行操作的时候,总是需要进行循环、循环、再循环。这是理所当然的么?不是。循环 是做事情的方式,而不是目的。每个需求都要循环一次,还要搞一个新集合来装数据,如果希望再次遍历,只能再使 用另一个循环从头开始。

那Stream能给我们带来怎样更加方便的写法呢?

Stream初体验

package demo01;

import java.util.ArrayList;
import java.util.List;

/**
 * @author huihui
 * @Project jdk8_stream
 * @date 2023/6/14 14:28
 */
public class Test {
    //        一个ArrayList集合中存储有以下数据:张无忌,周芷若,赵敏,孙悟空,张三丰,张三
    //        需求:1.拿到所有姓张的 2.拿到名字长度为3个字的 3.打印这些数据
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        list.add("孙悟空");
        list.add("张三丰");
        list.add("张三");

        list.stream().filter(t->t.startsWith("张")).filter(t->t.length()==3).forEach(item-> System.out.println(item));

    }
}

2.2 Stream流的原理

Stream流式思想类似于工厂车间的“生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加工 处理。Stream可以看作是流水线上的一个工序。在流水线上,通过多个工序让一个原材料加工成一个商品。

 2.3 步骤

  1. 获取Stream流对象
  2. 中间操作---返回类型还是Stream流对象
  3. 终止操作---不再是Stream流对象

 2.4 获取Stream流对象的方式

  1. 通过集合对象调用stream()
  2. 通过Arrays获取stream流对象
  3. 通过Stream流里面of方法
package demo02;

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

/**
 * @author huihui
 * @Project jdk8_stream
 * @date 2023/6/14 15:36
 */
public class Test02 {
    public static void main(String[] args) {
        //第一种通过集合对象调用
        List<String> list=new ArrayList<>();
        Stream<String> stream = list.stream();
        //第二种使用Arrays工具类
        String[] arr={};
        Stream<String> stream1 = Arrays.stream(arr);
        //第三种:Stream类
        Stream<Integer> stream2 = Stream.of(1,2,3,4,5,6);
        //上面都是串行流
    }
}
  • 还有一种并行流(效率提高,但不确定输出顺序)
package demo02;

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

/**
 * @author huihui
 * @Project jdk8_stream
 * @date 2023/6/14 15:36
 */
public class Test02 {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        list.add("张无忌");
        list.add("周芷若");
        list.add("赵敏");
        Stream<String> stringStream = list.parallelStream();
        stringStream.forEach(System.out::println);
    }
}

2.5 Stream流的API方法

例子:

        假设有一个Person类和一个Person列表,现在有两个需求:

             1.   找到年龄大于18岁的人并输出;

             2.   找出所有中国人的数量。

             3.   找出年龄最大和最小

package demo03;

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

/**
 * @author huihui
 * @Project jdk8_stream
 * @date 2023/6/14 15:52
 */
public class Test03 {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("欧阳雪",18,"中国",'F'));
        personList.add(new Person("Tom",24,"美国",'M'));
        personList.add(new Person("Harley",22,"英国",'F'));
        personList.add(new Person("向天笑",20,"中国",'M'));
        personList.add(new Person("李康",22,"中国",'M'));
        personList.add(new Person("小梅",20,"中国",'F'));
        personList.add(new Person("何雪",21,"中国",'F'));
        personList.add(new Person("李康",22,"中国",'M'));
        //1. 年龄大于18  filter:过滤掉不满足条件的元素.  forEach:输出元素. ---如果没有终止函数,那么中间函数的代码不会被执行。
        personList.stream().filter(item->item.getAge()>18).forEach(System.out::println);

        //2. 找出中国人  并统计个数: count()
        long count = personList.stream().filter(item -> item.getCountry().equals("中国")).count();
        System.out.println("中国人的数量为:"+count);

        //3.找出年龄最大和最小
        Person person1 = personList.stream().max((o1, o2) -> o1.getAge() - o2.getAge()).get();
        Person person2 = personList.stream().min((o1, o2) -> o1.getAge() - o2.getAge()).get();
        System.out.println("年龄最大:"+person1);
        System.out.println("年龄最小:"+person2);
    }
}

class Person {
    private String name;
    private Integer age;
    private String country;
    private char sex;

    public Person() {
    }

    public Person(String name, Integer age, String country, char sex) {
        this.name = name;
        this.age = age;
        this.country = country;
        this.sex = sex;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public Integer getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(Integer age) {
        this.age = age;
    }

    /**
     * 获取
     * @return country
     */
    public String getCountry() {
        return country;
    }

    /**
     * 设置
     * @param country
     */
    public void setCountry(String country) {
        this.country = country;
    }

    /**
     * 获取
     * @return sex
     */
    public char getSex() {
        return sex;
    }

    /**
     * 设置
     * @param sex
     */
    public void setSex(char sex) {
        this.sex = sex;
    }

    public String toString() {
        return "Person{name = " + name + ", age = " + age + ", country = " + country + ", sex = " + sex + "}";
    }
}

2.5.1 map

会把集合中的元素转化为另一种类型

 如上述案例---查询到来自中国的人民和年龄

 personList.stream().filter(item->item.getCountry().equals("中国")).map(item->new P(item.getName(),item.getAge())).forEach(System.out::println);

案例2:

package demo04;

import java.util.Arrays;
import java.util.List;

/**
 * @author huihui
 * @Project jdk8_stream
 * @date 2023/6/14 16:18
 */
public class Test04 {
    public static void main(String[] args) {
        //整数数组每个元素+3
        List<Integer> list = Arrays.asList(1, 17, 27, 7);
        list.stream().map(item -> item + 3).forEach(System.out::println);

        List<String> list2 = Arrays.asList("hello", "world", "java", "spring", "springmvc");
        //字符串大写
        list2.stream().map(String::toUpperCase).forEach(System.out::println);
    }
}

2.5.2 collect 收集

package demo05;



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

/**
 * @author huihui
 * @Project jdk8_stream
 * @date 2023/6/14 16:21
 */
public class Test05 {
    public static void main(String[] args) {
      List<Person5> personList = new ArrayList<>();
      personList.add(new Person5("小梅",24,"中国",'F'));
      personList.add(new Person5("欧阳雪",18,"中国",'F'));
      personList.add(new Person5("Tom",24,"美国",'M'));
      personList.add(new Person5("Harley",22,"英国",'F'));
      personList.add(new Person5("向天笑",20,"中国",'M'));
      personList.add(new Person5("李康",22,"中国",'M'));
      personList.add(new Person5("Jack",21,"中国",'F'));
      personList.add(new Person5("李四",22,"中国",'M'));
      //把Person-年龄大于20人--里面的名称----新的集合。
      personList.stream().filter(item->item.getAge()>20).map(item->item.getName()).collect(Collectors.toList()).forEach(System.out::println);
    }
}
class Person5{
  private String name;
  private Integer age;
  private String country;
  private char sex;

  public Person5() {
  }

  public Person5(String name, Integer age, String country, char sex) {
    this.name = name;
    this.age = age;
    this.country = country;
    this.sex = sex;
  }

  /**
   * 获取
   * @return name
   */
  public String getName() {
    return name;
  }

  /**
   * 设置
   * @param name
   */
  public void setName(String name) {
    this.name = name;
  }

  /**
   * 获取
   * @return age
   */
  public Integer getAge() {
    return age;
  }

  /**
   * 设置
   * @param age
   */
  public void setAge(Integer age) {
    this.age = age;
  }

  /**
   * 获取
   * @return country
   */
  public String getCountry() {
    return country;
  }

  /**
   * 设置
   * @param country
   */
  public void setCountry(String country) {
    this.country = country;
  }

  /**
   * 获取
   * @return sex
   */
  public char getSex() {
    return sex;
  }

  /**
   * 设置
   * @param sex
   */
  public void setSex(char sex) {
    this.sex = sex;
  }

  public String toString() {
    return "Person5{name = " + name + ", age = " + age + ", country = " + country + ", sex = " + sex + "}";
  }
}

2.5.3  sorted 排序

//根据年龄排序
      List<Person5> collect = personList.stream().sorted((o1, o2) -> o1.getAge() - o2.getAge()).collect(Collectors.toList());
      System.out.println(collect);

2.5.4 reduce 规约

归约,也称缩减,顾名思义,是把一个流缩减成一个值,能实现对集合求和、求乘积和求最值操作。

 例子:

        求[1,2,3,4]的乘积

package demo06;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;

/**
 * @author huihui
 * @Project jdk8_stream
 * @date 2023/6/14 16:30
 */
public class Test06 {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3, 5);
        Optional<Integer> reduce = list.stream().reduce((t1, t2) -> t1 * t2);
        //t1=1, t2=2 ===>2
        // t1=2  t2=3===>6
        // t1=6  t2=5====>30
        System.out.println(reduce.get());
    }
}

2.5.5 findFirst 查询第一个

      //查询年龄在18和20直接的一个
      Optional<Person5> first = personList.stream().filter(item->item.getAge()>=18&&item.getAge()<=20).findFirst();
      System.out.println(first.get());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JDK8新特性之Stream流 的相关文章

  • Keras和Tensorflow(CPU)安装、Pytorch(CPU和GPU)安装以及jupyter使用虚拟环境

    微信公众号 数学建模与人工智能 Keras和Tensorflow CPU 安装 Pytorch CPU和GPU 安装 Keras和Tensorflow CPU 安装 一 安装我用的是清华大学源 二 深度学习模型保存与加载 三 错误 Tens
  • 如何基于G6进行双树流转绘制?

    1 背景 业务背景 CRM系统随着各业务条线对线索精细化分配的诉求逐渐增加 各个条线的流向规则会越来越复杂 各个条线甚至整个CRM的线索流转规则急需一种树形的可视化的图来表达 技术背景 在开发之前考虑了三种方案 原生canvas fabri
  • 数学建模笔记(八):微分方程的应用(偏微分方程)

    文章目录 一 微分方程概述 1 什么是微分方程 2 求解方法 一 求精确解 二 求数值解 近似解 三 定性理论方法 3 建立微分模型的方法 一 根据定理规律列方程 二 微元分析法 三 模拟近似法 4 适用问题 5 常见动态模型 二 观众厅地
  • k-Means——经典聚类算法实验(Matlab实现)

    聚类算法 k Means实验 k 平均 k Means 也被称为k 均值 是一种得到最广泛使用的聚类算法 1 k Means算法以k为参数 把n个对象分为k个簇 使得簇内具有较高的相似度 实验目的 了解常用聚类算法及其优缺点 掌握k Mea
  • 2020年高教社建模国赛真题A题--炉温曲线

    2020年高教社杯全国大学生数学建模竞赛题目 请先阅读 全国大学生数学建模竞赛论文格式规范 A题 炉温曲线 在集成电路板等电子产品生产中 需要将安装有各种电子元件的印刷电路板放置在回焊炉中 通过加热 将电子元件自动焊接到电路板上 在这个生产
  • 一个参数一张Excel表,玩转Pandas的read_excel()表格读取

    作者 黄伟呢 来源 数据分析与统计学之美 我觉得很有必要讲述这个文章 进行数据处理的第一步就是Python数据读取 但是你可能没想到 在进行数据读取的同时 我们其实可以配合相关参数做很多事儿 这对于后续的数据处理都是极其有帮助 read e
  • 数学建模4 论文写作排版和技巧

    文字 标题一 四号黑体 标题二 三 小四号黑体 正文 宋体小四 行距1 5 标题前后空0 5行 英文和数字使用Times New Roman 小四 包括表格中的内 表头在表格上方 需写成 表1 什么什么表 黑体小五加粗 居中 图名在图下 需
  • 权重计算方法三:变异系数法(Coefficient of Variation)

    目录 1 原理简介 2 步骤详解 2 1 原始数据收集 2 2 指标数据正向化 2 3 数据标准化 消除量纲 2 4 计算变异系数 2 5 计算权重及得分 3 案例分析 3 1 获取原始数据 3 2 指标正向化 3 3 数据标准化 3 4
  • 主成分分析法(PCA)的理解(附python代码案例)

    目录 一 PCA简介 二 举个例子 三 计算过程 公式 3 0 题干假设 3 1 标准化 3 2 计算协方差矩阵 3 3 计算特征值和特征值向量 3 3 多重共线性检验 可跳过 3 4 适合性检验 可跳过 3 5 计算主成分贡献率及累计贡献
  • 【数学建模笔记 24】数学建模的时间序列模型

    24 时间序列模型 定义 时间序列是按时间顺序排列的 随时间变化且相互关联的数据序列 分析时间序列的方法构成数据分析的一个重要领域 即时间序列分析 一个时间序列往往是以下几类变化形式的叠加 长期趋势变动 T t T t Tt 朝一定方向的变
  • 数学建模中的经典问题-旅行商(TSP)问题

    1 相关理论 2 算法流程 3 代码实现 4 结果显示 1 相关理论 旅行商 TSP 问题是数学建模中的经典问题 它是一个典型的NP完全问题 TSP问题可描述为 已知n个城区相互之间的距离 某一旅行商从城市出发访问每个城市一次且仅一次 最后
  • 【数学建模】数据处理问题

    一 插值与拟合 常用于数据的补全以及趋势分析 1 插值 总的思想 就是利用函数f x 若干已知点的函数值 求出适当的特定函数g x 这样f x 其他未知点上的值 就可以用g x 在这一点的值来近似 这种通过已知求未知的方法称为 插值 插值方
  • Latex各种矩阵的输入方法

    代码顺序同上顺序 导言区 documentclass ctexart usepackage amsmath 正文区 begin document begin Bmatrix 1 2 4 5 end Bmatrix begin matrix
  • matlab遗传算法(GA)详解(一)算法入门

    遗传算法 Genetic Algorithm GA 是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型 是一种通过模拟自然进化过程搜索最优解 所找到的解是全局最优解 的方法 参数编码 初始群体的设定 适应度函数的设计 遗传
  • 数模培训第二周——图论模型

    图论中最短路算法与程序实现 图论中的最短路问题 包括无向图和有向图 是一个基本且常见的问题 主要的算法有Dijkstra算法和Floyd算法 Floyd算法 简介 Floyd Warshall算法 英语 Floyd Warshall alg
  • 2023年小美赛认证杯A题太阳黑子预测(Sunspot Forecasting)思路模型代码解析

    2023年小美赛认证杯A题 太阳黑子预测 Sunspot Forecasting 请电脑打开本文链接 扫描下方名片中二维码 获取更多资料 一 问题重述 太阳黑子是太阳光球上的现象 呈暂时性斑点 比周围区域更暗 它们是由磁通量浓度引起的表面温
  • 【ortools源码系列11】 time_limit h头文件功能和源码分析

    ortools源码系列 time limit h头文件功能和源码分析 文章目录 ortools源码系列 time limit h头文件功能和源码分析 TimeLimit 功能 TimeLimit 源码 SharedTimeLimit 功能
  • 【老生谈算法】matlab实现基于粒子群算法的多目标搜索算法——多目标搜索算法

    Matlab实现基于粒子群算法的多目标搜索算法 1 文档下载 本算法已经整理成文档如下 有需要的朋友可以点击进行下载 说明 文档 点击下载 本算法文档 老生谈算法 matlab实现基于粒子群算法的多目标搜索算法 doc 更多matlab算法
  • EasyV+UE创造数字孪生可视化新篇章!

    众所周知 UE是UNREAL ENGINE 虚幻引擎 的简写 由Epic开发 是世界知名授权最广的游戏引擎之一 EasyV是一款数据可视化应用平台 用户通过EasyV可以更高效的实现数据可视化项目搭建 产品内有丰富的模版 海量的组件 简单的
  • 2020年认证杯SPSSPRO杯数学建模D题(第二阶段)让电脑桌面飞起来全过程文档及程序

    2020年认证杯SPSSPRO杯数学建模 D题 让电脑桌面飞起来 原题再现 对于一些必须每天使用电脑工作的白领来说 电脑桌面有着非常特殊的意义 通常一些频繁使用或者比较重要的图标会一直保留在桌面上 但是随着时间的推移 桌面上的图标会越来越多

随机推荐

  • vs2017 社区版本离线下载安装包

    百度得来 记录备忘 下载vS 2017 https visualstudio microsoft com zh hans thank you downloading visual studio sku Community rel 15 下载
  • Directx11教程三十八之Pick(拾取技术)

    这节教程是关于Pick 拾取技术的 程序的结构如下 在看这节教程前先弄懂 1 大概了解D3D11的渲染流水线 2 D3D11教程三十七之FrustumCulling 视截体裁剪 上半节教程 弄不懂也没关系 两节教程之间有一些联系 但是由于我
  • 完全二叉树——二叉堆(BinaryHeap)

    前言 优先队列是允许至少下列两种操作的数据结构 insert 插入 以及deleteMin 删除最小者 其中deleteMin的工作是找出 返回 并删除优先队列中最小的元素 insert操作等价于enqueue 入队 而deleteMin则
  • Mysql存储引擎

    目录 Mysql有哪些存储引擎 Mysql存储引擎IMyISAM与InnoDB区别 MyISAM索引与InnoDB索引的区别 InnoDB引擎的4大特性 如何选择存储引擎 一张表 里面有ID自增主键 当insert了17条记录以后 删除了第
  • 解决IDEA无法导入Maven项目jar包的问题 - 已解决

    当我们创建Maven项目的时候 经常会出现导入jar包失败的问题 如下图所示 发现我们导入的依赖下面都有红线 解决方法有以下几种 1 有可能是因为我们将 pom的文件忽略了 解决方法 找到 file gt settings gt Build
  • java jbutton数组_java-JButton需要显示图像数组

    我有一组存储在数组中的图像 我需要像幻灯片一样显示它们 下一个和上一个有两个JButton 它们使用户可以查看图像 但是我无法使按钮起作用 有什么建议吗 谢谢 import java awt Graphics import java awt
  • 51行代码实现简单的PHP区块链

    本文原始地址 php区块链demo 今年区块链特别火 我也很火啊 我火什么呢 前几年 公众平台出现 还得花时间去学去看 后来小程序出现 又得花时间精力去学去看 现在比特币 以太坊等去中心化货币带起了区块链的发展 还得学 没办法 技术改变师姐
  • 感冒的一般过程

    http blog sina com cn s blog 7af11b49010136hl html 又感冒了 哎 挺严重 鼻涕流不停 特别畏寒 以前没发现感冒这么可怕 看到一篇关于感冒的文章 粘过来给大家分享一下 以防感冒 感冒 是一种自
  • Python轻松爬取Rosimm写真网站全部图片

    RosimmImage 爬取Rosimm写真网站图片 有图有真相 def main start url 爬虫入口 主要爬取操作 try r requests get url html headers HEADERS timeout 10 t
  • token由来

    https www cnblogs com bigben0123 p 8334824 html
  • compiler之automatic memory management以及Java GC

    基本方案就3种 1 mark and sweep 2 stop and copy 会用到copy graph算法 见leetcode 3 reference counting 前2种方案GC是一个是独立的过程 要先进行扫描 object g
  • Java Portlet 规范概述

    首先 解释几个基本的术语 1 Portal Portal 是一种 web 应用 通常具有个性化 单点登录 来自不同源的内容聚合 aggregation 并提供信息系统表现层等特点 所谓聚合 是指将不同来源的内容整合到一个 web 页面的操作
  • awk传入变量

    for chr in 1 22 do awk v nvar chr print 1 t nvar t 4 t 3 t 4 chr chr LD map gt chr chr LD1 map done
  • js-事件及事件委托

    1 事件 当用户浏览网页时 存在许许多多与网页交互的操作 例如按钮的点击 屏幕的滑动 鼠标的移动等等 通过这些交互完成某些操作 达到某种效果 我们可以将这些交互称之为事件 2 事件冒泡 事件冒泡是指事件在某个元素上触发后一直向上传播 父元素
  • 【个人项目】——细腻的人像分割

    项目地址 segmentation pytorch 前面介绍了 一个人像分割数据集 这里采用该数据做了人像分割的小demo Supervisely 人像分割数据集格式转换 1 测试 1 1 环境采用本机的torch140 1 2 下载预训练
  • 分享网友第一次开发EOS区块链总结的经验

    在处理项目时 用Java Connector for EOS区块链编写 创建钱包 创建帐户 创建交易 创建签名交易 在帐户之间转移代币 我遇到了各种和运行本地EOS节点需要遵循的基本步骤 这个小指南纯粹是为了帮助你启动和运行自己的EOS节点
  • Docker容器内部 DNS 解析失败的问题

    上段时间遇到了 docker 容器内部 dns 解析失败的问题 发现在 docker run 启动容器之后 容器内部访问外部的接口总是提示无法解析 dns 然而容器外部是可以解析的 dns的配置也没有任何问题 用 docker exec i
  • 如何使用CSS画一个三角形

    原理 其实就是规定元素的四个边框颜色及边框宽度 将元素宽高设置为0 如果要哪个方向的三角形 将对应其他三个方向的边框宽和颜色设置为0和透明transparent即可 1 元素设置边框 宽高 背景色 div class border div
  • 启动hadoop时异常:connect to host hadoop002 port 22 Connection refused

    问题描述 今天在搭建hadoop伪分布式集群时 启动hadoop 报如下异常情况 hadoop002 也就我设置的Secondary namenode 拒绝连接 启动Secondary namenode失败 root hadoop1 sta
  • JDK8新特性之Stream流

    目录 一 简介 二 Stream流的应用 2 1 为什么使用stream流 2 2 Stream流的原理 2 3 步骤 2 4 获取Stream流对象的方式 2 5 Stream流的API方法 2 5 1 map 2 5 2 collect