jdk8 新特性stream().map()

摘要:
'},Staff Public{name='jack',年龄=27,额外='ull'}

1.大写字符串列表

1.1 简单的Java示例将Strings列表转换为大写

TestJava8.java
package com.mkyong.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]
 
    }
 
}

2.对象列表 - >字符串列表

2.1 name从staff对象列表中获取所有值

Staff.java

package com.mkyong.java8;
 
import java.math.BigDecimal;
 
public class Staff {
 
    private String name;
    private int age;
    private BigDecimal salary;
    //...
}

TestJava8.java

package com.mkyong.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("mkyong", 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); //[mkyong, jack, lawrence]
 
        //Java 8
        List<String> collect = staff.stream().map(x -> x.getName()).collect(Collectors.toList());
        System.out.println(collect); //[mkyong, jack, lawrence]
}

3. 对象列表 - >其他对象列表

3.1 此示例说明如何将staff对象列表转换为对象列表StaffPublic

Staff.java

package com.mkyong.java8;
 
import java.math.BigDecimal;
 
public class Staff {
 
    private String name;
    private int age;
    private BigDecimal salary;
    //...
}

StaffPublic.java

package com.mkyong.java8;
 
public class StaffPublic {
 
    private String name;
    private int age;
    private String extra;
    //...
}

3.2 Java 8之前

BeforeJava8.java

package com.mkyong.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("mkyong", 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 ("mkyong".equals(temp.getName())) {
                obj.setExtra("this field is for mkyong only!");
            }
 
            result.add(obj);
        }
 
        return result;
 
    }
 
}

输出:

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

3.3 Java 8的例子

NowJava8.java

package com.mkyong.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("mkyong", 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 ("mkyong".equals(temp.getName())) {
                obj.setExtra("this field is for mkyong only!");
            }
            return obj;
        }).collect(Collectors.toList());
 
        System.out.println(result);
 
    }
 
}

输出:

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

免责声明:文章转载自《jdk8 新特性stream().map()》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇四维的王坚和三维的阿里互联网汽车JQuery 之 Ajax 异步和同步浅谈下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

android环境下的即时通讯

首先了解一下即时通信的概念。通过消息通道 传输消息对象,一个账号发往另外一账号,只要账号在线,可以即时获取到消息,这就是最简单的即使通讯。消息通道可由TCP/IP UDP实现。通俗讲就是把一个人要发送给另外一个人的消息对象(文字,音视频,文件)通过消息通道(C/S实时通信)进行传输的服务。即时通讯应该包括四种形式,在线直传、在线代理、离线代理、离线扩展。在...

.NET链接Oracle 参数绑定问题

在.NET项目中链接Oracle使用的驱动是 Oracle.ManagedDataAccess.dll ,这里下载 所遇到的问题 使用存储过程一个参数没有问题,发现两个或两个以上会有参数没传过来的现象。 最后通过排查发现是没有添加参数绑定(问题找了好长时间,刚开始还以为驱动的问题+_+)。 需要设置设置属性 BindByName = true; 下面附上 ...

MySql与Java的时间类型

MySql与Java的时间类型 MySql的时间类型有Java中与之对应的时间类型datejava.sql.Date Datetimejava.sql.Timestamp Timestampjava.sql.Timestamp Timejava.sql.Time Yearjava.sql.Date 对其进行分析参考MySql 的reference ma...

(八)Asp.NET中三层架构的应用

一、 什么是三层架构? 生活中的三层 初始结构: 在现实生活中,如果老王开了一家饭店,前期顾客比较少,自己来招待客人、在后厨炒菜、每天去市场采购食材。但是随着顾客量的增加,饭店的生意越来越兴隆,自己一个人单干忙的不可开交。就好比我们的软件系统一样,我们的用户是浏览我们的网页的,主要的功能是体现在UI层面,用户和系统产生交互,UI层面需要接收用户的数据信...

使用CompletableFuture优化你的代码执行效率

  这篇文章详细讲解java8中CompletableFuture的特性,方法以及实例.   在java8以前,我们使用java的多线程编程,一般是通过Runnable中的run方法来完成,这种方式,有个很明显的缺点,就是,没有返回值,这时候,大家可能会去尝试使用Callable中的call方法,然后用Future返回结果,如下: public stati...

转:获取客户端网卡的MAC地址

教程由JAVA中文网整理校对发布(javaweb.cc) 1.获取客户端ip地址( 这个必须从客户端传到后台):jsp页面下,很简单,request.getRemoteAddr() ;因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换 1. public String getMyIP() { 2....