Java8 教程第四章之Streams map

本套JAVA8教程由于是有英文翻译过来的,如果有翻译不对的地方还请多多包涵。

本节课先简单的介绍下Java8有哪些新特性,对于Java6/7版本做出哪些更改.那废话不多说,赶紧开始今天的课程吧.

上一篇文章中还没有回过神的同学醒醒了,这里要详细介绍map函数咯

将List中里面的字符转换成大写字母

在 Java 8里面stream().map() 允许你把 object 转化成其他对象. 一起看下例子吧

public static void main(String[] args) {
        List<String> alpha = Arrays.asList("a", "b", "c", "d");

        //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]
        // 另外, streams 允许你做任意的转化.
        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]
}

上面的这一波操作是不是很秀, 其实并不难, 手把手在idea中敲一下你就会明白了. 代码还是要多写

从对象List 获取字符 List

这里还继续试用User对象吧,我比较懒

public class User {

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

public static void main(String[] args) {

        List<User> userList = Arrays.asList(
                new User("张三", 30,new BigDecimal(10000)),
                new User("李四", 20,new BigDecimal(20000)),
                new User("Enoch", 40,new BigDecimal(30000))
        );
        //在 Java 8 之前
        List<String> result = new ArrayList<>();
        for (User x : userList) {
            result.add(x.getName());
        }
        System.out.println(result); //[张三, 李四, Enoch]

        //Java 8
        List<String> collect = userList.stream().map(x ->x.getName()).collect(Collectors.toList());
        //List<String> collect = userList.stream().map(User::getName).collect(Collectors.toList());
        System.out.println(collect); //[张三, 李四, Enoch]
    }

objects List转化为 其他 objects List

这个例子展示如何将一个 User 对象 List 转化为一个 UserPublic 对象List.

public class User {

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

public class UserPublic {

    private String name;
    private int age;
    private String extra;
    //...
}

我们先看看java8之前怎么做吧,废话不多说 直接上代码

public static void main(String[] args) {

        List<User> userList = Arrays.asList(
                new User("张三", 30,new BigDecimal(10000)),
                new User("李四", 20,new BigDecimal(20000)),
                new User("Enoch", 40,new BigDecimal(30000))
        );
        List<UserPublic> result = convertToStaffPublic(userList);
        System.out.println(result);
    }
    
    private static List<UserPublic> convertToStaffPublic(List<User> userList) {

        List<UserPublic> result = new ArrayList<>();
        for (User temp : userList) {
            UserPublic obj = new UserPublic();
            obj.setName(temp.getName());
            obj.setAge(temp.getAge());
            obj.setExtra(temp.getSalary().toString());
            result.add(obj);
        }
        return result;
    }

这代码写的是不是都快恶心死了,好烦的代码啊,怪不得头发掉那么厉害呢,
OK那赶紧看看java8的写法吧

 public static void main(String[] args) {

        List<User> userList = Arrays.asList(
                new User("张三", 30,new BigDecimal(10000)),
                new User("李四", 20,new BigDecimal(20000)),
                new User("Enoch", 40,new BigDecimal(30000))
        );
        // convert inside the map() method directly.
        List<UserPublic> result = userList.stream().map(temp -> new UserPublic(temp.getName(),temp.getAge(),temp.getName())).collect(Collectors.toList());
        System.out.println(result);
    }

哈哈 是不是爽的一批啊. 很清爽吧, 小伙伴们赶紧试试吧. 好好写代码 就是头有点凉啊..
欢迎小伙伴们踊跃留言呢!!!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容