Java8特性之用Stream流代替For循环操作详解

目录
  • 准备一个实体类
  • 准备一个List集合
  • 传统的for循环
  • 使用Stream流
  • 先声明筛选条件,在遍历
  • Stream操作 嵌套循环(2层)

准备一个实体类

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

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

准备一个List集合

        List<Student> list=new ArrayList<>();
        Student s1=new Student();
        s1.setName("张三");
        s1.setAge(18);
        list.add(s1);
        Student s2=new Student();
        s2.setName("李四");
        s2.setAge(22);
        list.add(s2);

传统的for循环

        //for循环
        for (int i=0;i< list.size();i++){
            System.out.println(list.get(i));
        }

        //增强for循环
        for(Student student: list){
            System.out.println(student);
        }
        //迭代器
        Iterator<Student> iterator = list.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

使用Stream流

        //遍历List集合
        list.stream().forEach(str->{
           System.out.println(str.getName()+":"+str.getAge());
        });
        //过滤 把名字为李四的过滤掉
        list.stream().filter(str -> !"李四".equals(str.getName())).forEach(str -> {
            System.out.println(str.getName()+":"+str.getAge());
        });
         //操作对象,拼接
       //String collect=list.stream().map(student->student.getName()).collect(Collectors.joining(",","前","后"));
       // System.out.println(collect);

先声明筛选条件,在遍历

 //声明一个条件 学生年龄大于18
 Predicate<Student> pred = (student) -> student.getAge() > 18;
 //调用方法
 selectStudent(list,pred);
 private static void selectStudent(List<Student> list, Predicate<Student> pred) {
        System.out.println("选出年龄大于18的学生:");
        list.forEach(student -> {
            if (pred.test(student)){
                System.out.println(student.getName()+":"+student.getAge());
            }
        });

    }

Stream操作 嵌套循环(2层)

//java 8 stream操作 嵌套循环
        List<Student> list = list1.stream().filter(student1 -> list2.stream()
                .anyMatch(studnet2 -> student1.getName().equals(studnet2.getName()) ))
                .collect(Collectors.toList());
        System.out.println("stream操作筛选后的结果" + list.get(0).getName());

但是不建议foreach套foreach

到此这篇关于Java8特性之用Stream流代替For循环操作详解的文章就介绍到这了,更多相关Java Stream流代替For循环内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 一篇文章带你了解Java Stream流

    目录 一.Stream流引入 现有一个需求: 1.用常规方法解决需求 2.用Stream流操作集合,获取流,过滤操作,打印输出 二.Stream流的格式 三.获取流 四.Stream流的常用方法 方法演示: 1.count方法: 2.filter方法: 3.forEach方法 4.limit方法 5.map方法 6.skip方法 7.concat方法 五.收集Stream流 总结 一.Stream流引入 Lambda表达式,基于Lambda所带来的函数式编程,又引入了一个全新的Stream概念,

  • Java Stream流之求和的实现

    BigDecimal: BigDecimal bb =list.stream().map(Plan::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add); int.double.long: double max = list.stream().mapToDouble(User::getHeight).sum(); 补充:java8-Stream流之数值函数(求和.最大值.最小值.平均值) 我就废话不多说了,大家还是直接看代码吧~ //todo s

  • Java8之Stream流代替For循环操作

    Stream流代替For循环进行输出可以使代码更简洁. 需求:根据姓名获取员工信息 1.建立实体类:Emp public class Emp { private String id; private String name; public Emp(String id, String name) { this.id=id; this.name=name; } public String getId() { return id; } public void setId(String id) { th

  • 详解JAVA Stream流

    摘要 Stream 是对集合对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作,或者大批量数据操作.通常我们需要多行代码才能完成的操作,借助于Stream流式处理可以很简单的实现. Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的. 创建Steam流 调用Collection.stream()函数创建一个Stream对象 Stream 接口的静态方法 of 可以获取数组对应的流 List<String> list = new ArrayList<

  • 总结一下关于在Java8中使用stream流踩过的一些坑

    Java8的stream流 第一个坑: Collectors.toAsList()其实是new了一个list,在向里面赋值. 注意这里Collectors.toList()的写法,这里其实是底层new ArraryList().筛选的数据放到一个新的list.虽然标1处和标2处是同一个变量,但是内存地址是不一样啊.下面的逻辑时把hldrPolVOList中的某些元素删除.但是这个方法执行完后其实是没有删除里面元素的.原因就是这里的new ArraryList()更改了内存地址造成的. 测试: 解

  • Java8特性之用Stream流代替For循环操作详解

    目录 准备一个实体类 准备一个List集合 传统的for循环 使用Stream流 先声明筛选条件,在遍历 Stream操作 嵌套循环(2层) 准备一个实体类 public class Student { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int get

  • Java基础之Stream流原理与用法详解

    目录 一.接口设计 二.创建操作 三.中间操作 四.最终操作 五.Collect收集 Stream简化元素计算 一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream:基础接口,声明了流管理的核心方法: Stream:核心接口,声明了流操作的核心方法,其他接口为指定类型的适配: 基础案例:通过指定元素的值,返回一个序列流,元素的内容是字符串,并转换为Long类型,最终计算求和结果并

  • Kotlin下Rxjava的基础用法及流式调用示例详解

    目录 前言 基础用法 fromXXX create interval & timer 指定线程 observeOn & subscribeOn Flowable 流式调用 背压 前言 万事开头难,写文章也是,现在越来越不知道开头怎么写了,所以在前言中,简单介绍下RxJava吧,第一次听说还是以前做Android开发的时候,那时候好多库中都使用了Rxjava,而在网络请求中,也有很多都是使用Rxjava去写,但自己却没怎么在项目中写过,而在搜索资料中发现,微信中搜rxjava时,最多介绍他的

  • python中IO流和对象序列化详解

    目录 一.IO流的操作 二.对象序列化 总结 一.IO流的操作 (1).什么是IO流(Input Output Stream)?IO流说的主要是计算机的输入和输出操作.常见的IO操作,一般说的是内存.IO流是一种常见的持久化(永久保存)技术:将数据从内存输出到磁盘保存下来.(2).IO流的分类根据数据流动(站在内存的角度上来说):输入流.输出流根据数据的类型:字符流.字节流注:字符流:字符只能操作有字符的数据(读到末尾是’’)字节流:字节是可以操作一切数据的(读到末尾是b’’),字节流操作大数据

  • Node.js实战之Buffer和Stream模块系统深入剖析详解

    目录 正文 写入缓冲区 从流中读取数据 管道流 链式流 模块系统 正文 JavaScript语言本身只有字符串数据类型,没有二进制数据类型. 但是,在处理TCP流或文件流时必须使用二进制数据. 因此,在node JS中,定义了一个缓冲区类来创建用于存储二进制数据的缓冲区. const buf = Buffer.from('runoob', 'ascii'); 在node JS中,缓冲区类是与node内核一起发布的核心库. 缓冲库是node JS带来的一种存储原始数据的方法,它允许节点JS. co

  • Java中IO流 RandomAccessFile类实例详解

    Java中IO流 RandomAccessFile类实例详解 RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合 打开文件,有两种模式,"rw"读写."r"只读:RandomAccessFile raf = new RandomAccessFile(file, "rw");,文

  • Java打印流原理及实例详解

    这篇文章主要介绍了Java打印流原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 平时我们在控制台打印输出,是调用print方法和println方法完成的,这两个方法都来自于java.io.PrintStream类,该类能够方便地打印各种数据类型的值,是一种便捷的输岀方式. PrintStream类 PrintStream类,为其他输出流添加了功能,使他们能够方便的打印各种数据值表示格式. PrintStream类的特点: 只负责数

  • Java使用FileInputStream流读取文件示例详解

    一.File流概念 JAVA中针对文件的读写操作设置了一系列的流,其中主要有FileInputStream,FileOutputStream,FileReader,FileWriter四种最为常用的流 二.FileInputStream 1)FileInputStream概念  FileInputStream流被称为文件字节输入流,意思指对文件数据以字节的形式进行读取操作如读取图片视频等 2)构造方法 2.1)通过打开与File类对象代表的实际文件的链接来创建FileInputStream流对象

  • MySQL高级特性——数据表分区的概念及机制详解

    MySQL 的分区的实现方式是对数据表进行一层包装,这意味着索引实际是基于每个分区定义的,而不是整张表.这个特性和 Oracle 是不同的,在 Oracle 中的索引和数据表可以使用更灵活和更复杂的方式进行分区.​ MySQL 的分区通过定义 PATITION BY 子句的条件来决定数据行所属分区的归属.在执行查询的时候,查询优化器会区分所在分区,这意味着查询不会检查全部分区,而仅仅是那些包含索要查询数据所在的分区.​ 分区的主要目的是对数据表进行大致形式的索引和聚集.这样可以减少数据表的过大范

随机推荐