代替匿名内部类

before

    @Test
    public void oldRunable() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println(\"The old runable now is using!\");
            }
        }).start();
}

after

@Test
    public void runable() {
        new Thread(() -> System.out.println(\"It\'s a lambda function!\")).start();
    }

output

The old runable now is using!
It\'s a lambda function!

对集合进行迭代

    @Test
    public void iterTest() {
        List<String> languages = Arrays.asList(\"java\",\"scala\",\"python\");
        //before java8
        for(String each:languages) {
            System.out.println(each);
        }
        //after java8
        languages.forEach(x -> System.out.println(x));
        languages.forEach(System.out::println);
    }

实现map

 @Test
    public void mapTest() {
        List<Double> cost = Arrays.asList(10.0, 20.0,30.0);
        cost.stream().map(x -> x + x*0.05).forEach(x -> System.out.println(x));
    }

reduce的两个参数,第一个是上一层执行的中间结果,第二个参数是上一步执行的结果,传输到本步骤

实现map与reduce

    @Test
    public void mapReduceTest() {
        List<Double> cost = Arrays.asList(10.0, 20.0,30.0);
        double allCost = cost.stream().map(x -> x+x*0.05).reduce((sum,x) -> sum + x).get();
        System.out.println(allCost);
    }

与函数式接口Predicate配合

    public static void filterTest(List<String> languages, Predicate<String> condition) {
        languages.stream().filter(x -> condition.test(x)).forEach(x -> System.out.println(x + \" \"));
    }

    public static void main(String[] args) {
        List<String> languages = Arrays.asList(\"Java\",\"Python\",\"scala\",\"Shell\",\"R\");
        System.out.println(\"Language starts with J: \");
        filterTest(languages,x -> x.startsWith(\"J\"));
        System.out.println(\"\\nLanguage ends with a: \");
        filterTest(languages,x -> x.endsWith(\"a\"));
        System.out.println(\"\\nAll languages: \");
        filterTest(languages,x -> true);
        System.out.println(\"\\nNo languages: \");
        filterTest(languages,x -> false);
        System.out.println(\"\\nLanguage length bigger three: \");
        filterTest(languages,x -> x.length() > 4);
    }

output

Language starts with J: 
Java 

Language ends with a: 
Java 
scala 

All languages: 
Java 
Python 
scala 
Shell 
R 

No languages: 

Language length bigger three: 
Python 
scala 
Shell 

收藏 打印