Java 8 语言能力-1

import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;

/** * Created by Shusheng Shi on 2017/5/1. */
public class Sample {
    public static void main(String[] args) {
        List<Integer> values = Arrays.asList(1, 2, 3, 4, 5, 6);

        //外部迭代,本质上是一种串行化操作
        for (int i = 0; i < values.size(); i++) {
            System.out.println(values.get(i));
        }

        for (int e : values) {
            System.out.println(e);
        }
        /*for循环其实就是封装了迭代的语法糖*/
        Iterator<Integer> iterator = values.iterator();
        while (iterator.hasNext()) {
            Integer i = iterator.next();
            System.out.println(i);
        }

        System.out.println("=======================================");

        /*称函数式接口就是笑话,难道还考虑别的什么什么接口是不是函数式的 * 其实就是一个只能有一个抽象方法的简单的抽象方法接口 * 其定义规定了你能传参的个数,否则直接编译错误! * */
        values.forEach(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) {
                System.out.println(values);
            }
        });

        //超级无敌吊炸天的lambda表达式
        values.forEach(value -> System.out.println(values));
        System.out.println("=======================================");
        /*这是段及其dirty的代码*/
        int total = 0;
        for (int e : values) {
            total += e * 2;
        }
        System.out.println(total);

        //内部迭代,注意stream()方法的调用,和iterator()作用一样,不过返回的是内部迭代相应接口:Stream
        /*stream是一个神奇的迭代器,提供大量函数供调用,而不仅仅是has(⊙o⊙)哦hasNext? * * */

        System.out.println(
                values.stream()
                        .map(e -> e * 2)//若有一函数可将一种类型的值转化为另一种类型,map操作即可使用该函数,将一个流中的值转换成一个新的流
                        .reduce(0, (c, e) -> c + e)//reduce操作实现从一组值中生成一个值(count,max,min方法其实都是该操作)此处c是累加器,保存着当前累加结果,且0为c的初始值
        );

    }
}

import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;

/** * Created by Shusheng Shi on 2017/5/1. */

public class Sample {
    public static void main(String[] args) {
        List<Integer> values = Arrays.asList(1, 2, 3, 4, 5, 6,7,8,9,10);
// System.out.println(totalValues(values,e->true));
// System.out.println(totalValues(values, e -> e % 2 == 0));
// System.out.println(totalValues(values, e -> e % 2 != 0));


// System.out.println(
// values.stream()
// .filter(e -> e > 3)
// .filter(e -> e % 2 == 0)
// .map(e -> e * 2)
// .findFirst()
// .orElse(0));

// System.out.println(
// values.stream()
// .filter(Sample::isGT3)
// .filter(Sample::isEven)
// .map(e -> e * 2)
// .findFirst()
// .orElse(0));

          //laziness of stream
// System.out.println(
// values.stream()
// .filter(Sample::isGT3)
// .filter(Sample::isEven)
// .map(e -> e * 2));
// System.out.println("here doNothing");
    }

    public static boolean isEven(int number) {
        System.out.println("isEven for " + number);
        return number % 2 == 0;
    }
    public static boolean isGT3(int number) {
        System.out.println("isGT3 for " + number);
        return number > 3;
    }
    public static int doubleIt(int number) {
        System.out.println("doubleIt for " + number);
        return number * 2;
    }

    private static int totalValues(List<Integer> numbers, Predicate<Integer> selector) {
        return numbers.stream()
                      .filter(selector)
                      .reduce(0, (c, e) -> c + e);
    }
}
全部评论

相关推荐

贪食滴🐶:你说熟悉扣篮的底层原理,有过隔扣职业球员的实战经验吗
点赞 评论 收藏
分享
我即大橘:耐泡王
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务