java8中 lambda语法和stream

来源:互联网 发布:filter 过滤css和js 编辑:程序博客网 时间:2024/05/18 03:03


java8最大的特性就是lambda和stream API

lambda写的好可以极大的减少代码冗余,同时可读性也好过冗长的内部类,匿名类。

Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。Iterator只能一个一个遍历元素并对其执行某些操作;而对于 Stream,用户只要给出需要对其包含的元素执行什么操作,Stream 会隐式地在内部进行遍历,做出相应的数据操作。 
Stream 是单向的,数据只能遍历一次,遍历过一次后即用尽了,就好比水流流过,一去不复返。 


按钮的点击事件由原来的集成变成现在这样

findViewById(R.id.btn1).setOnClickListener(view -> button1());

更像是指针指向某个操作,但其实不然


//平方数        List<Integer> nums = Arrays.asList(1, 2, 3, 4);        List<Integer> squareNums =                nums.stream()                        .map(n -> n * n)                        .collect(Collectors.toList());//这段代码生成一个整数 list 的平方数 {1, 4, 9, 16}。        squareNums.forEach(System.out::println);

        // 1. Individual values        Stream stream = Stream.of("a", "b", "c");// 2. Arrays        String [] strArray = new String[] {"a", "b", "c"};        stream = Stream.of(strArray);        stream = Arrays.stream(strArray);// 3. Collections        List<String> list = Arrays.asList(strArray);        stream = list.stream();        list.forEach(p -> System.out.println(p));

        List<String> wordList=Arrays.asList("a","e","q");        //转换大写        List<String> output =                wordList.stream()                        .map(String::toUpperCase)                        .collect(Collectors.toList());//这段代码把所有的单词转换为大写。        output.forEach(p -> System.out.println(p));

// 筛选偶数Integer[] sixNums = {1, 2, 3, 4, 5, 6};Integer[] evens = Stream.of(sixNums)        .filter(n -> n%2 == 0)        .toArray(Integer[]::new);System.out.println("取偶");for(int i=0;i<evens.length;i++){    System.out.println(evens[i]);}

几个简单的示例