常用Java-Stream学习

改文章的理解都是作者自己的理解,哪里不对的地方还希望指出!!!!!

一、distince()

作用:去掉流中的重复元素

java 复制代码
public static void main(String[] args) {
        List<Integer> distinct_list = new ArrayList<>(Arrays.asList(1,1,2,2,33,34));          
      List<Integer>tem_list=distinct_list.stream().distinct().collect(Collectors.toList());
        Stream<Integer> stream = count_list.stream().distinct();
        System.out.println(tem_list);
    }

运行结果:1, 2, 33, 34

二、count ()

作用:计算流中元素的个数

java 复制代码
 public static void main(String[] args) {
        List<Integer> count_list = new ArrayList<>(Arrays.asList(1,1,2,2,33,34));
        Long tem_list_count = count_list.stream().count();
        System.out.println(tem_list_count);
    }

运行结果:6

三、Arrays.stream()和Stream.of()

作用:创建Stream流

java 复制代码
public static void main(String[] args) {
        String [] array = new String[]{"你好","世界"};
        Stream<String> arrays_string = Arrays.stream(array);
        Stream<String> of_string = Stream.of(array);
        List<String> arrays_list = arrays_string.collect(Collectors.toList());
        List<String> of_list = of_string.collect(Collectors.toList());
        System.out.println("Arrays.stream -> " + arrays_list);
        System.out.println("Stream.of -> " + of_list);
    }

运行结果: Arrays.stream -> 你好, 世界

Stream.of -> 你好, 世界
注意: Stream.of()的执行代码其实调用的是Arrays.stream()。

java 复制代码
public static<T> Stream<T> of(T... values) {
        return Arrays.stream(values);
    }

四、filter()

作用:过滤掉不符合条件的元素,得到自己想要的元素集合

java 复制代码
public static void main(String[] args) {
        List<Integer> filter_list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6));
        System.out.println(filter_list.stream().filter(k -> {
            return k > 3;
        }).collect(Collectors.toList()));
    }

运至结果:4, 5, 6
注意:

java 复制代码
1、
System.out.println(filter_list.stream().filter(k -> {
            return k > 3;
        }).collect(Collectors.toList()));

2、
System.out.println(filter_list.stream().filter(k -> k > 3).collect(Collectors.toList()));

1、2代码是一样的原理,学过C++的都知道Lambda表达式,k就相当于filter方法的形参,通过条件语句进行判断返回

五、map()

功能:映射,将一个流中的某个元素转换为另外一种形式的流。

java 复制代码
public static void main(String[] args) {
        List<Integer> filter_list = new ArrayList<>(Arrays.asList(2, 4, 6, 8, 10, 12));
        System.out.println(filter_list.stream().map(k -> {
            return k / 2;
        }).collect(Collectors.toList()));
    }

运行结果:1,2,3,4,5,6

六、 anyMatch()和allMatch()

功能:匹配元素,anyMatch()若有一个条件返回true,反之false,allMatch()若所有都满足条件返回true,反之false

java 复制代码
public static void main(String[] args) {
        List<Integer> filter_list = new ArrayList<>(Arrays.asList(2, 4, 6, 8, 10, 12));
        System.out.println(filter_list.stream().anyMatch(k -> k > 6));
        System.out.println(filter_list.stream().allMatch(k -> k > 6));
    }

运行结果:true

false

七、skip()和limit()

skip(n)功能:丢弃第n个元素前面的元素

limit(n)功能:只要n个元素

skip()加上limit()功能组合起来就可以形成分页功能

java 复制代码
 public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6));
        List<Integer> skip_list = list.stream().skip(2).collect(toList());
        List<Integer> limit_list = list.stream().limit(3).collect(toList());
        System.out.println("skip_list = " + skip_list);
        System.out.println("limit_list = " + limit_list);
        final int[] i = {-2};
        List<List<Integer>> skip_limit_list = list.stream().map(k -> {
            return list.stream().skip(i[0] += 2).limit(2).collect(toList());
        }).collect(toList());
        System.out.println("skip_limit_list = " + skip_limit_list);
    }

运行结果:skip_list = 3, 4, 5, 6

limit_list = 1, 2, 3

skip_limit_list = \[1, 2, 3, 4, 5, 6, \[\], \[\], \[\]]

相关推荐
码界索隆6 分钟前
Python转Java系列:面向对象基础
java·开发语言·python
DIY源码阁10 分钟前
JavaSwing酒店管理系统 - MySQL版
java·mysql·eclipse
不恋水的雨29 分钟前
easyexcel快速填充大数据量不覆盖后面的行解决方式
java·excel·poi
范什么特西31 分钟前
Maven中dependencies和dependencyManagement区别
java·开发语言·maven
SunnyDays101132 分钟前
Java 操作 Word 超链接:添加网页、邮箱、文件和图片链接
java·word·超链接
DFT计算杂谈43 分钟前
WannierTools输入文件wt.in一键批量生成脚本
java·前端·chrome·python·算法·conda
大神15731 小时前
Cordova Android 签名三种方式详解:证书生成、命令行直接签名与配置文件自动签名
android·java
武子康1 小时前
调查研究-170 Vert.x 是什么?它和 Netty 到底是什么关系?一张图讲清 Java 异步技术栈选型
java·后端
zzz_23681 小时前
【Java基础】泛型的门道:伪泛型的真相
java·开发语言
我登哥MVP1 小时前
SpringCloud 核心组件解析:服务链路追踪
java·spring boot·后端·spring·spring cloud·java-ee·maven