Java8 - Streams map()

news2024/11/15 11:47:42

文章目录

  • 概述
  • Case 1 : A List of Strings to Uppercase
  • Case 2 : List of objects -> List of String
  • Case 3 : List of objects -> List of other objects
  • Test

在这里插入图片描述

概述

Stream.map()是Stream最常用的一个转换方法,它把一个Stream转换为另一个Stream

map()方法用于将一个Stream的每个元素映射成另一个元素并转换成一个新的Stream

可以将一种元素类型转换成另一种元素类型。

    /**
     * Returns a stream consisting of the results of applying the given
     * function to the elements of this stream.
     *
     * <p>This is an <a href="package-summary.html#StreamOps">intermediate
     * operation</a>.
     *
     * @param <R> The element type of the new stream
     * @param mapper a <a href="package-summary.html#NonInterference">non-interfering</a>,
     *               <a href="package-summary.html#Statelessness">stateless</a>
     *               function to apply to each element
     * @return the new stream
     */
    <R> Stream<R> map(Function<? super T, ? extends R> mapper);

map()方法接收的对象是Function接口对象,它定义了一个apply()方法,负责把一个T类型转换成R类型。

其中,Function的定义为

@FunctionalInterface
public interface Function<T, R> {

    /**
     * Applies this function to the given argument.
     *
     * @param t the function argument
     * @return the function result
     */
    R apply(T t);  //   将T类型转换为R:

	....
	....
	....

}


Case 1 : A List of Strings to Uppercase

/**
     * A List of Strings to Uppercase
     */
    public static void StringsListToUppercase() {
        List<String> list = Arrays.asList("a", "b", "c", "d");

        // before java 8
        List<String> newList = new ArrayList<>();
        for (String str : list) {
            newList.add(str.toUpperCase());
        }
        System.out.println(newList);

        // java 8
        List<String> collect = list.stream().map(String::toUpperCase).collect(Collectors.toList());
        System.out.println(collect);

        // Extra, streams apply to any data type.
        List<Integer> integers = Arrays.asList(1, 2, 3, 4);
        List<Integer> collect1 = integers.stream().map(t -> t * 2).collect(Collectors.toList());
        System.out.println(collect1);

    }

Case 2 : List of objects -> List of String

 /**
     * List of objects -> List of String
     */
    public static void objectsListToStringList() {
        List<Artisan> artisanList = Arrays.asList(
                new Artisan("小A", 18, new BigDecimal(100)),
                new Artisan("小B", 19, new BigDecimal(200)),
                new Artisan("小C", 20, new BigDecimal(300)));

        // Before Java 8
        List<String> nameList = new ArrayList<>();
        for (Artisan artisan : artisanList) {
            nameList.add(artisan.getName());
        }
        log.info(nameList.toString());

        // Java 8
        List<String> collect = artisanList.stream().map(Artisan::getName).collect(Collectors.toList());
        log.info(collect.toString());



    }

Case 3 : List of objects -> List of other objects

/**
     * List of objects -> List of other objects
     */
    public static void objectsListToOtherObjectsList() {

        List<Artisan> artisanList = Arrays.asList(
                new Artisan("小A", 18, new BigDecimal(100)),
                new Artisan("小B", 19, new BigDecimal(200)),
                new Artisan("小C", 20, new BigDecimal(300)));

        // Before Java 8
        List<ArtisanOther> convert2OtherList = new ArrayList<>();

        for (Artisan artisan : artisanList) {
            ArtisanOther artisanOther = new ArtisanOther();
            artisanOther.setAge(artisan.getAge());
            artisanOther.setName(artisan.getName());

            if ("小C".equals(artisan.getName())) {
                artisanOther.setOtherInfo("Only For 小C");
            }
            convert2OtherList.add(artisanOther);
        }
        log.info(convert2OtherList.toString());

        // Java 8
        artisanList.stream().map(artisan -> {
            ArtisanOther artisanOther = new ArtisanOther();
            artisanOther.setAge(artisan.getAge());
            artisanOther.setName(artisan.getName());

            if ("小C".equals(artisan.getName())) {
                artisanOther.setOtherInfo("Only For 小C");
            }
            return artisanOther;
        }).collect(Collectors.toList());
        log.info(convert2OtherList.toString());
    }


Test

    public static void main(String[] args) {
        // A List of Strings to Uppercase
        StringsListToUppercase();

        // List of objects -> List of String
        objectsListToStringList();

        // List of objects -> List of other objects
        objectsListToOtherObjectsList();
    }


	
  // 俩内部类 
  @Data
    @NoArgsConstructor
    @AllArgsConstructor
    static class Artisan {
        private String name;
        private int age;
        private BigDecimal salary;
    }

    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    static class ArtisanOther {
        private String name;
        private int age;
        private String otherInfo;
    }


[A, B, C, D]
[A, B, C, D]
[2, 4, 6, 8]
21:57:13.914 [main] INFO com.artisan.java8.stream2.StreamMap - [A,B,C]
21:57:13.918 [main] INFO com.artisan.java8.stream2.StreamMap - [A,B,C]
21:57:13.919 [main] INFO com.artisan.java8.stream2.StreamMap - [StreamMap.ArtisanOther(name=A, age=18, otherInfo=null), StreamMap.ArtisanOther(name=B, age=19, otherInfo=null), StreamMap.ArtisanOther(name=C, age=20, otherInfo=Only ForC)]
21:57:13.920 [main] INFO com.artisan.java8.stream2.StreamMap - [StreamMap.ArtisanOther(name=A, age=18, otherInfo=null), StreamMap.ArtisanOther(name=B, age=19, otherInfo=null), StreamMap.ArtisanOther(name=C, age=20, otherInfo=Only ForC)]

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/131288.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络安全人才市场需求调研

声明 本文是学习2022网络安全人才市场状况研究报告. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 网络安全人才市场需求调研 为了更好地了解网络安全人才市场能力需求情况&#xff0c;我们通过调研问卷对网络安全人才就业市场不同方向的十…

Jetson nano 入手系列之1—如何SSH远程登录

Jetson nano 入手系列之1— 如何SSH远程登录方法1.windows与jetson nano使用同一个网络方法2.windows与jetson nano使用网线连接参考文献本文使用的windows平台来ssh远程登录jetson nano&#xff0c;这里提供两种方法。方法1.windows与jetson nano使用同一个网络 使用同一个网络…

二氧化碳捕获和电化学转化(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

12---实现注册、异常处理,统一封装结果集

1、写统一返回结果包装类 在实际开发中&#xff0c;为了降低开发人员之间的沟通成本&#xff0c;一般返回结果会定义成一个统一格式&#xff0c;具体的格式根据实际开发业务不同有所区别&#xff0c;但至少包括三要素&#xff1a; code状态码&#xff1a;由后端统一定义各种返…

3)Django模板

目录 Django模板 Django 模板标签 变量 ​编辑 列表 字典 过滤器 default length filesizeformat date truncatechars safe if/else 标签 for 标签 {% empty %} ifequal/ifnotequal 标签 注释标签 include 标签 csrf_token 配置静态文件 模板继承 父模板…

Elasticsearch搜索引擎(一)——基础使用

Elasticsearch搜索引擎 关键词是中文的建议使用&#xff0c;英文和数字不要&#xff0c;模糊就行 如果普通数据库查询&#xff0c;无法解决如下问题 如果表记录上千万上亿了这个性能问题&#xff0c;另外一个如果有一个本文字段要在里面模糊配置&#xff0c;这个就会出现严重…

【408篇】C语言笔记-第二十章(数据的机器级表示)

文章目录第一节&#xff1a;补码讲解及内存实战演练1. 补码讲解2. 反码第二节&#xff1a;整型不同类型解析-溢出解析1. 整型不同类型解析2. 溢出解析第三节&#xff1a;IEEE754标准解析第四节&#xff1a;浮点型精度丢失第一节&#xff1a;补码讲解及内存实战演练 1. 补码讲解…

使用华为云服务器跟做尚硅谷电商数仓遇到的问题汇总(持续更新中.......)

文章目录使用xsync时提示xsync:command not found执行lg.sh时显示lg.sh:command not found云服务器网页无法访问hadoop使用xsync时提示xsync:command not found 1.使用xsync时提示xsync:command not found 首先查看是否安装rsync:&#xff08;反正我的里面没有。。。&#xff…

实验十、差分放大电路参数对静态和动态的影响

一、题目 利用Multism研究图1所示差分放大电路在下列情况下对电路静态和动态的影响 &#xff08;1&#xff09;两个 RcR_cRc​ 阻值相差 5%&#xff1b; &#xff08;2&#xff09;RwR_wRw​ 不在中点&#xff1b; &#xff08;3&#xff09;两个差分管的电流放大倍数不相等。…

sql行转列

我们以MySQL数据库为例&#xff0c;来说明行转列的实现方式。 首先&#xff0c;假设我们有一张分数表&#xff08;tb_score&#xff09;&#xff0c;表中的数据如下图&#xff1a; 然后&#xff0c;我们再来看一下转换之后需要得到的结果&#xff0c;如下图&#xff1a; 可以看…

SpringBoot(一)【学习笔记】

1.SpringBoot是什么&#xff1f; Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的&#xff0c;使用它可以做到专注于Spring应用的开发&#xff0c;而无需过多关注XML的配置。 2.SpringBoot的特点 为基于Spring的开发提供更快的入门体验 开箱即用&#xf…

Qt QAbstractItemModel类详解

文章目录一.概述二.QAbstractItemModel类1.类型2.信号3.函数一.概述 QAbstractItemModel 类定义了项目模型必须使用的标准接口&#xff0c;以便能够与模型/视图Model/View框架中的其他组件进行互操作。 正确用法是将其子类化以创建新模型。此类用作 QML 中的项目视图元素或 Qt…

自制Alfred/Wox插件推荐

最近上手Alfred的使用&#xff0c;日常工作中存在很多需要高频执行的连续性动作&#xff0c;将这一系列动作封装成Workflow&#xff0c;通过命令触发&#xff0c;对提升效率确有很大帮助。 自己封装了一些简单的Workflow&#xff0c;这里分享出来。有Alfred/Wox框架的支撑&…

JAVA零基础小白学习免费教程day14-SetHashMap

day14_JAVAOOP 课程目标 1. 【理解】Set集合的特点 2. 【理解】Set集合不重复的原理 3. 【掌握】HaseSet集合的基本使用 4. 【理解】LinkedHashSet的特点 5. 【理解】Map集合的特点 6. 【掌握】HashMap的使用 7. 【理解】LinkedHashMap的特点 8. 【掌握】Map集合的案例 9. 【…

doxygen教程之注释风格

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> doxygen是一个开源的C接口文档生成工具。要使用doxygen生成接口文档&#xff0c;就必须遵循它的注释规范&#xff0c;下面对它的注释规范进行简单介绍。 …

C语言基础--初识指针

文章目录一、初识指针二、指针和指针类型指针类型的意义1&#xff09;指针的解引用①问题抛出②探讨③总结2&#xff09;指针整数3&#xff09;总结4)举例三、野指针&#xff08;1&#xff09;概念1) 指针未初始化2)指针越界访问3&#xff09;指针指向的空间释放&#xff08;2&…

python类中常见内置方法

目录 一.几种常用的类内置方法 魔术方法 _ _str_ _字符串方法 _ _lt_ _小于符号比较方法 _ _le_ _小于等于比较符号方法 _ _eq_ _等于比较符号 一.几种常用的类内置方法 魔术方法 上文提到的_ _init_ _构造方法&#xff0c;是Python类内置的方法之一。 这些内置的类方法…

人工智能-聚类算法

1、聚类算法简介 典型的无监督算法&#xff0c;主要用于将相似的样本自动归到一个类别中。 根据样本之间的相似性&#xff0c;将样本划分到不同的类别中&#xff0c;对于不同的相似度计算方法&#xff0c;会得到不同的聚类结果。常用的相似度计算方法是欧式距离法 聚类算法与…

2022年总结 2023展望

前言 今天是2022年最后一天&#xff0c;姑且简单总结这一年。这一年从头到尾发生了很多翻天覆地的事件。回看去年2021年的年度总结还是有些遗憾&#xff0c;完成度4/7。 回顾 2021 年立下的 flag&#xff1a; 写文章30篇 没有完成&#xff0c;技术和知识是在有断断续续学习&a…

【Linux】多线程

目录 一、什么是线程 1、线程的基本认识 2、Linux线程与接口关系的认识 3、创建线程 4、线程等待 5、线程终止 6、线程分离 二、线程的优点 三、线程的缺点 四、线程与进程的关系 1、线程安全与重入 2、不可重入情况 3、可重入情况 4、可重入与线程安全的联系 五…