Java 8 Streams map()_石奈子的博客-程序员宅基地_jdk8 stream().map

技术标签: java8  Stream  Map  

在java8中, stream().map()可以让你转化一个对象成其他的对象。下面我们通过下面的例子来看一下:

  • String集合字符串转为大写

TestJava8.java
package com.ricky.java8;

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

public class TestJava8 {
    

    public static void main(String[] args) {

        List<String> alpha = Arrays.asList("a", "b", "c", "d");

        //Before Java8
        List<String> alphaUpper = new ArrayList<>();
        for (String s : alpha) {
            alphaUpper.add(s.toUpperCase());
        }

        System.out.println(alpha); //[a, b, c, d]
        System.out.println(alphaUpper); //[A, B, C, D]

        // Java 8
        List<String> collect = alpha.stream().map(String::toUpperCase).collect(Collectors.toList());
        System.out.println(collect); //[A, B, C, D]

        // Extra, streams apply to any data type.
        List<Integer> num = Arrays.asList(1,2,3,4,5);
        List<Integer> collect1 = num.stream().map(n -> n * 2).collect(Collectors.toList());
        System.out.println(collect1); //[2, 4, 6, 8, 10]

    }

}
  • List of objects -> List of String
    • 从staff对象集合中获取所有的名字。


Staff.java
package com.ricky.java8;

import java.math.BigDecimal;

public class Staff {
    

    private String name;
    private int age;
    private BigDecimal salary;
    //...
}
TestJava8.java
package com.ricky.java8;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class TestJava8 {
    

    public static void main(String[] args) {

        List<Staff> staff = Arrays.asList(
                new Staff("ricky", 30, new BigDecimal(10000)),
                new Staff("jack", 27, new BigDecimal(20000)),
                new Staff("lawrence", 33, new BigDecimal(30000))
        );

        //Before Java 8
        List<String> result = new ArrayList<>();
        for (Staff x : staff) {
            result.add(x.getName());
        }
        System.out.println(result); //[ricky, jack, lawrence]

        //Java 8
        List<String> collect = staff.stream().map(x -> x.getName()).collect(Collectors.toList());
        System.out.println(collect); //[ricky, jack, lawrence]

    }

}
  • List of objects -> List of other objects
    一个例子展示怎么转化staff对象为StaffPublic对象

Staff.java
package com.ricky.java8;

import java.math.BigDecimal;

public class Staff {
    

    private String name;
    private int age;
    private BigDecimal salary;
    //...
}

StaffPublic.java
package com.ricky.java8;

public class StaffPublic {
    

    private String name;
    private int age;
    private String extra;
    //...
}
  • java8以前的方式

BeforeJava8.java
package com.ricky.java8;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class BeforeJava8 {
    

    public static void main(String[] args) {

        List<Staff> staff = Arrays.asList(
                new Staff("ricky", 30, new BigDecimal(10000)),
                new Staff("jack", 27, new BigDecimal(20000)),
                new Staff("lawrence", 33, new BigDecimal(30000))
        );

        List<StaffPublic> result = convertToStaffPublic(staff);
        System.out.println(result);

    }

    private static List<StaffPublic> convertToStaffPublic(List<Staff> staff) {

        List<StaffPublic> result = new ArrayList<>();

        for (Staff temp : staff) {

            StaffPublic obj = new StaffPublic();
            obj.setName(temp.getName());
            obj.setAge(temp.getAge());
            if ("ricky".equals(temp.getName())) {
                obj.setExtra("this field is for ricky only!");
            }

            result.add(obj);
        }

        return result;

    }

}

输出


[
    StaffPublic{name='ricky', age=30, extra='this field is for ricky only!'},
    StaffPublic{name='jack', age=27, extra='null'},
    StaffPublic{name='lawrence', age=33, extra='null'}
]

  • java8的方式

NowJava8.java
package com.ricky.java8;

package com.hostingcompass.web.java8;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class NowJava8 {
    

    public static void main(String[] args) {

        List<Staff> staff = Arrays.asList(
                new Staff("ricky", 30, new BigDecimal(10000)),
                new Staff("jack", 27, new BigDecimal(20000)),
                new Staff("lawrence", 33, new BigDecimal(30000))
        );

        // convert inside the map() method directly.
        List<StaffPublic> result = staff.stream().map(temp -> {
            StaffPublic obj = new StaffPublic();
            obj.setName(temp.getName());
            obj.setAge(temp.getAge());
            if ("ricky".equals(temp.getName())) {
                obj.setExtra("this field is for ricky only!");
            }
            return obj;
        }).collect(Collectors.toList());

        System.out.println(result);

    }

}

输出


[
    StaffPublic{name='ricky', age=30, extra='this field is for ricky only!'},
    StaffPublic{name='jack', age=27, extra='null'},
    StaffPublic{name='lawrence', age=33, extra='null'}
]

翻译

ricky 20170730

交流群:244930845

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u014042066/article/details/76372116

智能推荐

显示器的 VGA、HDMI、DVI 和DisplayPort接口有什么区别?_行者三个石的博客-程序员宅基地_display port

作者:黎小白链接:https://www.zhihu.com/question/19571221/answer/172861467来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。显示器接口★简介最常见的显示器接口有VGA端子、数码视频接口 (DVI)、高画质多媒体接口(HDMI)和DisplayPort(DP)。★最常见的显示器接口◇VGA端...

解决错误OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。_顾悦西的博客-程序员宅基地_oserror: [winerror 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝

学习transforms时,输入tensorboard --logdir=logs时没有出现运行地址,反而出现错误OSError: [WinError 10013] 以一种访问权限不允许的方式做了一个访问套接字的尝试。原因:端口被占用问题此处端口号为6006解决办法:1.命令提示符中查看哪个进程占用了端口号netstat -ano|findstr 6006findstr 5272(查看详细信息,5272为上一步查出来的结果)2.kill进程taskkill /pid 5272 /F

职场之路-- 学习_ThePromonkeyOf_HeLuo的博客-程序员宅基地

简介终生学习者,永远劳苦命! 技术部是一切,完成业务需求才是最高标准

混合 APP 开发(Hybrid App)_Leecsdn77的博客-程序员宅基地_混合app开发

目录混合 App Html5简介 UIWebView 和 WKWebView UIWebView 和 JS 交互 WKWebView 和 JS 交互 JS 调用 Native 相机一. 混合 APPHybrid Mobile App 可以理解为通过 Web 网络技术(如 HTML,CSS 和 JavaScript)与 Native 相结合的混合移动应用程序。H5用于大...

大数据的思维方式新特点_cheyan5318的博客-程序员宅基地

大数据的蔓延影响的领域范围越来越大,是不是可以激发数据信息内部的价值,带来对思维方式的影响。大数据的思维方式也是建立在大数据的基础上,那么大数据会给思维方式带来什么样的影响呢。 第一、思维的主体 传统的思维主体主要是个人,在大数据时代,这个主体将得到跨越式的发...

随便推点

法国国籍依然全球最佳,脱欧让英国面临排名大幅下降的风险_美通社的博客-程序员宅基地

法国公民能够对他们的国籍再次排名全球第一感到满意,但是对英国公民来说,“硬”脱欧的后果却有可能让他们的国籍质量从全球第8名,大幅下降至第56名。这是凯林和科切诺夫国籍质量...

窥探-spring boot应用参数ApplciationArguments_Tony-devj的博客-程序员宅基地

窥探-spring boot应用参数ApplciationArguments简单使用探索ApplciationArgumentsDefaultApplicationArguments实现类CommandLineArgs类在进行springboot开发的时候,我们启动的时候会使用run方法,代码如下:public static void main(String ... args){ SpringApplication springApplication = new SpringApplicati

OpenGL 概念整理_And乔的博客-程序员宅基地

OpenGL 概念整理1. OpenGL1.1 术语说明概念描述版本OpenGLOpen Graphics Library Khronos 定义GPU功能实现的SPEC,标准API4.6OpenGL ESEmbedded System 为嵌入式系统定义的相关补充接口3.2EGL用于GPU渲染与机器原生窗口之间通信的API,独立于OpenGL ES各个版本VulkanKhronos组织新定义的接口,相比于OpenGL更加高效1.21.2 Op

TS01 : TS变量类型详解TS函数_七月是我的生日的博客-程序员宅基地_ts讲变量定义为一个函数

1.typescript概述什么是javascript?(运行环境 浏览器/ nodejs)JavaScript (缩写: JS)是-种运行在客户端(比如:浏览器)中的编程语言。当应用于浏览器时,为网站提供动态交互特性,让网页“动”起来。JavaScript的运行环境: 1浏览器2 Node.js.Node.js让JavaScript摆脱了浏览器的束缚,可以实现服务端/桌面端编程等。什么是typescript?TypeScript (简称: TS)是JavaScript的超集(JS 有

写作的力道——北漂18年(番外篇一)_jobchanceleo的博客-程序员宅基地

“怎么写出力儿来!怎样把书写的章节完整,文从字顺?”可能是每个写东西的人面临的问题。2006年从写简单的博文开始至2016年初,我已出版5本图书(4本原创、1本翻译),应该至少算会写的。“写作是要有些天才的,否则再练也是白费”的谬论始终充斥耳畔,这成了不少人写不好的借口和理由【余编辑的故事见北漂18年(66)】。我想说的是:“正确的方法会迅速提升写作水平以达到预期。”

推荐文章

热门文章

相关标签