IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java高级(二):JDK8新特性:Stream流、方法引用 -> 正文阅读

[Java知识库]Java高级(二):JDK8新特性:Stream流、方法引用

目录

Stream流

流式思想:

终结方法

延迟方法

静态方法

获取流的方法

方法引用

具体使用方法


Stream流

以前对集合操作的时候,总是循环、循环、再循环。循环只是方式,不是目的。线性循环还有一个缺点只能遍历一次,如果还有其他操作还需要重新进行循环

Lambda的衍生物Stream(只考虑目的,不用考虑实现方式)

流式思想:


类似于流水线,一步一步的执行,中间的延迟方法都会返回一个流对象(流对象本身),最后会有终结方法

Stream流对象只能使用一次(每个模型(就是流对象)使用完后 都会自动销毁)

特点:

  • Pipelining: 中间操作都会返回流对象本身。 这样多个操作可以串联成一个管道
  • 内部迭代:Stream提供了内部迭代的方式,流可以直接调用遍历方法。

终结方法

  • void forEach(Consumer<? super T> action); 接收每一个参数 对其处理
  • long count();统计元素个数

延迟方法

  • Stream<T> filter(Predicate<? super T> predicate);将一个流转换成子集流,进行过滤
  • <R> Stream<R> map(Function<? super T, ? extends R> mapper);映射 可以将集合内的所有元素进行类型转换
  • Stream<T> skip(long n);跳过前几个
  • Stream<T> limit(long maxSize);取用前几个

静态方法

  • static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b):将两个流合并到一起

获取流的方法

  • 根据Collection获取流:stream方法
  • 根据Map获取流:单独获取键值对的Set集合,再调用stream方法
  • 根据数组获取流:Stream.of(数组对象)

示例代码

public static void main(String[] args) {
        Integer[] ints={1,2,3,11,33,133,22,5};
        String[] strings={"张三","李四","王五","赵六","张三丰"};
        Stream<Integer> ints1 = Stream.of(ints);//获得stream对象
        Stream<String> strings1 = Stream.of(strings);//获得stream对象
        //使用过滤器 大于5小于150 最后输出
        Stream<Integer> stream1 = ints1.filter(i -> i > 5).filter(i -> i < 150);//ints1已经使用过了 不能再一次使用
        //姓张且长度大于2 的姓名
        Stream<String> stream2 = strings1.filter(s -> s.startsWith("张")).filter(s -> s.length() > 2);
        Stream<? extends Serializable> concat = Stream.concat(stream1, stream2);//进行拼接
        concat.forEach(i-> System.out.print(i+"\t"));//11	33	133	22	张三丰
        Stream<Integer> ints2 = Stream.of(ints);//获得stream对象
        System.out.println();
        //跳过前两个 取用前四个
        ints2.skip(2).limit(4).forEach(i-> System.out.print(i+"\t"));//3	11	33	133
    }

方法引用

方法引用是Lambda表达式的一种简写方法

Lambda 中 传递的参数 一定是方法引用中 的那个方法可以接收的类型

 public static void main(String[] args) {
        //printstring("HELLO",s-> System.out.println(s));
        printstring("hello", System.out::println);
    }
System.out::println等价于s-> System.out.println(s)

具体使用方法

  • 通过对象名使用成员方法? 对象名::成员方法名
  • 通过类名称引用静态方法? 类名::方法名? 例如:Math::abs
  • 通过super引用成员方法 supper::方法名
  • 通过this引用成员方法 this::方法名
  • 类的构造器引用?类名称::new 例如:name ‐> new Person(name)等价于Person::new
  • 数组的构造器引用??length -> new int[length] 等价于int[]::new

示例代码

//父子之间的方法引用(子类调用带有函数式接口的方法,将参数传递给父类方法(无参的话之间调用父类的方法))
public class Zi extends Fu{
    @Override
    public void sey() {
        System.out.println("我子类");
    }
    public void method(test1 t){
        t.printaaa();
    }
    public void show(){
        method(super::sey);//我是父亲
        method(this::sey);//我子类
    }
}
//类的构造器的引用
  private static person buind(String name,int age,builder builder){
        //接口功能获取个参数 建立对象
        return builder.test2(name,age);
    }
    public static void main(String[] args) {
        System.out.println( buind("王欢",12,person::new).toString());//person{name='王欢', age=12}
    }
//数组构造器的引用
private static int[] binder(int l,test3 test3){
        //接口的作用 接收一个参数(数组长度) 创建数组对象
        return test3.num(l);
    }
    public static void main(String[] args) {
        int[] binder = binder(12, int[]::new);
        System.out.println(binder.length);//12
    }

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:13:10  更:2021-09-02 11:14:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:23:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码