美文网首页
Java8 教程第四章之Streams map

Java8 教程第四章之Streams map

作者: PrimaryKeyEnoch | 来源:发表于2019-08-11 17:02 被阅读0次

    本套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);
        }
    

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

    相关文章

      网友评论

          本文标题:Java8 教程第四章之Streams map

          本文链接:https://www.haomeiwen.com/subject/swjsjctx.html