jdk8新特性-Stream流详解及使用样例(Stream创建、使用、收集、并行流、注意事项)_java8创建线程安全的inputstream

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

import java.util.stream.Stream;

/**
* Stream创建和注意事项
*
* @author dd
* @since 2021/12/30
*/
public class StreamGetAndNotice {
/**
* Stream创建方法
*/
public void testGet() {
// 方式1 : 根据Collection获取流
// Collection接口中有一个默认的方法: default Stream stream()
List list = new ArrayList<>();
Stream stream1 = list.stream();

    Set<String> set = new HashSet<>();
    Stream<String> stream2 = set.stream();

    Map<String, String> map = new HashMap<>();
    Stream<String> stream3 = map.keySet().stream();
    Stream<String> stream4 = map.values().stream();
    Stream<Map.Entry<String, String>> stream5 = map.entrySet().stream();

    // 方式2 : Stream中的静态方法of获取流
    // static<T> Stream<T> of(T... values)
    Stream<String> stream6 = Stream.of("aa", "bb", "cc");

    String[] strs = {"aa", "bb", "cc"};
    Stream<String> stream7 = Stream.of(strs);

    // 基本数据类型的数组行不行?不行的,会将整个数组看做一个元素进行操作.
    int[] arr = {11, 22, 33};
    Stream<int[]> stream8 = Stream.of(arr);
}

/\*\*

* 注意事项样例
*/
public void notice() {
Stream stream = Stream.of(“aa”, “bb”, “cc”);
// 1. Stream只能操作一次
// long count = stream.count();
// long count2 = stream.count();

    // 2. Stream方法返回的是新的流
    // Stream<String> limit = stream.limit(1);
    // System.out.println("stream" + stream);
    // System.out.println("limit" + limit);

    // 3. Stream不调用终结方法,中间的操作不会执行
    stream.filter((s) -> {
        System.out.println(s);
        return true;
    }).count();
}

}




---


## 二、Stream常用处理方法



package stream;

import stream.entity.Person;

import java.util.Optional;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
* Stream常用方法
* @author dd
* @since 2021/12/30
*/
public class StreamCommonFunc {
Stream stream = Stream.of(“1111”, “222”, “333”, “44”, “55”, “55”);

/\*\*

* 循环
*/
public void testForeach() {
stream.forEach(System.out::println);
}

/\*\*

* 获取数量
*/
public void testCount() {
System.out.println(stream.count());
}

/\*\*

* 得到名字长度为3个字的人(过滤)
*/
public void testFilter() {
stream.filter(s -> s.length() == 3).forEach(System.out::println);
}

/\*\*

* 获取前3个数据
*/
public void testLimit() {
stream.limit(3).forEach(System.out::println);
}

/\*\*

* 跳过前两个数据
*/
public void testSkip() {
stream.skip(3).forEach(System.out::println);
}

/\*\*

* 映射
*/
public void testMap() {
Stream s = stream.map(Integer::parseInt);
s.forEach(System.out::println);
}

/\*\*

* 排序
*/
public void testSorted() {
Stream s = stream.map(Integer::parseInt);
s.sorted((i1, i2) -> i2 - i1).forEach(System.out::println);
}

/\*\*

* 去重
*/

public void testDistinct() {
    stream.distinct().forEach(System.out::println);
}

/\*\*

* 条件匹配
*/
public void testMatch() {
System.out.println(stream.allMatch(s -> s.length() > 2));
System.out.println(stream.anyMatch(s -> s.length() > 2));
System.out.println(stream.noneMatch(s -> s.length() > 2));
}

/\*\*

* 查找第一个元素
*/
public void testFind() {
System.out.println(stream.findFirst().get());
}

/\*\*

* 获取最大最小值
*/
public void testMax_Min() {
// 获取最大值
// 1, 3, 5, 6
Optional max = Stream.of(5, 3, 6, 1).max((o1, o2) -> o1 - o2);
System.out.println("最大值: " + max.get());

    // 获取最小值
    // 1, 3, 5, 6
    Optional<Integer> min = Stream.of(5, 3, 6, 1).min((o1, o2) -> o1 - o2);
    System.out.println("最小值: " + min.get());
}


public void testReduce() {
    // T reduce(T identity, BinaryOperator<T> accumulator);
    // T identity: 默认值
    // BinaryOperator<T> accumulator: 对数据进行处理的方式
    // reduce如何执行?
    // 第一次, 将默认值赋值给x, 取出集合第一元素赋值给y
    // 第二次, 将上一次返回的结果赋值x, 取出集合第二元素赋值给y
    // 第三次, 将上一次返回的结果赋值x, 取出集合第三元素赋值给y
    // 第四次, 将上一次返回的结果赋值x, 取出集合第四元素赋值给y
    int reduce = Stream.of(4, 5, 3, 9).reduce(0, (x, y) -> {
        System.out.println("x = " + x + ", y = " + y);
        return x + y;
    });
    System.out.println("reduce = " + reduce); // 21

    // 获取最大值
    Integer max = Stream.of(4, 5, 3, 9).reduce(0, (x, y) -> {
        return x > y ? x : y;
    });
    System.out.println("max = " + max);
}

public void testMapReduce() {
    // 求出所有年龄的总和
    // 1.得到所有的年龄
    // 2.让年龄相加
    Integer totalAge = Stream.of(
                    new Person("刘德华", 58),
                    new Person("张学友", 56),
                    new Person("郭富城", 54),
                    new Person("黎明", 52))
            .map((p) -> p.getAge()).reduce(0, Integer::sum);

    System.out.println("totalAge = " + totalAge);


    // 找出最大年龄
    // 1.得到所有的年龄
    // 2.获取最大的年龄
    Integer maxAge = Stream.of(
                    new Person("刘德华", 58),
                    new Person("张学友", 56),
                    new Person("郭富城", 54),
                    new Person("黎明", 52))
            .map(p -> p.getAge())
            .reduce(0, Math::max);
    System.out.println("maxAge = " + maxAge);

    // 统计 a 出现的次数
    // 1 0 0 1 0 1
    Integer count = Stream.of("a", "c", "b", "a", "b", "a")
            .map(s -> {
                if (s == "a") {
                    return 1;
                } else {
                    return 0;
                }
            })
            .reduce(0, Integer::sum);
    System.out.println("count = " + count);
}

public void testNumericStream() {
    // Integer占用的内存比int多,在Stream流操作中会自动装箱和拆箱
    Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
    // 把大于3的打印出来
    // stream.filter(n -> n > 3).forEach(System.out::println);

    // IntStream mapToInt(ToIntFunction<? super T> mapper);
    // IntStream: 内部操作的是int类型的数据,就可以节省内存,减少自动装箱和拆箱

    IntStream intStream = Stream.of(1, 2, 3, 4, 5).mapToInt(Integer::intValue);
    intStream.filter(n -> n > 3).forEach(System.out::println);
}

/\*\*

* stream连接
*/
public void testContact() {
Stream streamA = Stream.of(“张三”);
Stream streamB = Stream.of(“李四”);

    // 合并成一个流
    Stream<String> newStream = Stream.concat(streamA, streamB);
    // 注意:合并流之后,不能操作之前的流啦.
    // streamA.forEach(System.out::println);

    newStream.forEach(System.out::println);
}

}




---


## 三、并行Stream流创建及使用



package com.cloud.jdk8.stream;

import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
* 并行Stream流创建及使用
* @author dd
* @since 2021/12/31
*/
public class StreamParallel {

/\*\*

* 并行Stream流创建方法
*/
@Test
public void testGetParallelStream() {
// 掌握获取并行Stream流的两种方式
// 方式一:直接获取并行的Stream流
List list = new ArrayList<>();
Stream stream = list.parallelStream();

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

需要体系化学习资料的朋友,可以加我V获取:vip204888 (备注网络安全)

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值