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);
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 13:15
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务