设为首页 加入收藏

TOP

这么简单,还不会使用java8 stream流的map()方法吗?(一)
2023-07-25 21:35:51 】 浏览:55
Tags:简单 java8 stream map 方法吗

一、前言

在日常的开发工作中经常碰到要处理list中数据的问题,比如从数据库中查出了很多学生,由于一些原因需要在内存中找出这些学生中的所有姓名,或者把名为“王五”的语文成绩暂时修改为“100”,这些问题怎么处理呐,之前我们想到的是遍历每个元素,然后取出来放到另外一个集合中,在java8中对集合可以进行流式操作使上面的处理更简洁。今天来看下map()方法的使用。

二、概述

stram流式处理中有map方法,先看下其定义,该方法在java.util.stream.Stream类中,

可以看到map()方法接收一个函数式接口参数,入参有一个T,返回一个Stream流,这个流是R泛型。主要有以下几点注意,

  1. 入参是一个流中的元素;
  2. 出参是一个流,且流中是新元素;

用图表示就是下面的样子,原始流中有四个圆形图案,调用map()函数后变成了四个五角星图案,这里的圆形图案和五角星图案是一一对应的,也就是原始流中有多少个元素,调用map()方法后依旧有多少个元素,唯一改变的是流中的元素类型

好了,下面看下怎么使用map()函数。

三、详述

以Student为例,

Student.java

package com.example.log.stream.entity;
import java.io.Serializable;
/**
 * 学生类
 * @date 2022/11/30 20:40
 */
public class Student implements Serializable {
    /**
     * 姓名
     */
    private String name;
    /**
     * 班级
     */
    private String schoolClass;

    /**
     *语文成绩
     */
    private Integer chineseScore;
    /**
     * 数学成绩
     */
    private Integer MathScore;
    
    //省略get、set方法
}

有一个初始化数据的类,用来初始化一个List

Data.java

package com.example.log.stream.test;

import com.example.log.stream.entity.Student;

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

/**
 * @date 2022/11/30 22:43
 */
public class Data {
    public static List<Student> initData(){
        List<Student> students= new ArrayList<>();
        Student s1=new Student();
        s1.setName("王五");
        s1.setSchoolClass("一年级");
        s1.setChineseScore(100);
        s1.setMathScore(100);
        students.add(s1);

        Student s2=new Student();
        s2.setName("李四");
        s2.setSchoolClass("一年级");
        s2.setChineseScore(100);
        s2.setMathScore(100);
        students.add(s2);

        Student s3=new Student();
        s3.setName("李思");
        s3.setSchoolClass("二年级");
        s3.setChineseScore(100);
        s3.setMathScore(100);
        students.add(s3);

        Student s4=new Student();
        s4.setName("王五");
        s4.setSchoolClass("三年级");
        s4.setChineseScore(100);
        s4.setMathScore(100);
        students.add(s4);

        Student s5=new Student();
        s5.setName("赵三");
        s5.setSchoolClass("一年级");
        s5.setChineseScore(100);
        s5.setMathScore(100);
        students.add(s5);
        return students;
    }
}

下面根据上面的数据,进行下面的操作。

3.1、找出所有的学生姓名

TestMap.java

package com.example.log.stream.test;

import com.example.log.stream.entity.Student;

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

/**
 * 测试map方法
 * @date 2022/11/30 21:25
 */
public class TestMap {
    public static void main(String[] args) {
        List<Student> students=Data.initData();
        students.stream().map(student -> student.getName()).forEach(System.out::println);
    }

}

这里使用了map()方法,入参是Student,出参是以String为泛型的流,最后使用forEach进行了打印,看下结果

可以看到刚好把所有的学生姓名均打印出来了。如果想把这些学生姓名放到一个List中怎么办?

3.1.1、将学生姓名放到list中

package com.example.log.stream.test;

import com.example.log.stream.entity.Student;

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

/**
 * 测试map方法
 *
 * @author wangcj5
 * @date 2022/11/30 21:25
 */
public class TestMap {
    public static void main(String[] args) {
        List<Student> students=Data.initData();
//        students.stream().map(student -> student.getName()).forEach(System.out::println);
        //将所有的学生姓名放到list中
        List<String> studentNames=students.stream().map(student -> student.getName()).collect(Collectors.toList());
     for (String studentName:st
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇day13-SpringBoot整合MyBatis/Plus 下一篇JAVA多线程有哪几种实现方式呢?

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目