zoukankan      html  css  js  c++  java
  • Java 8 函数式编程

    基本概念

    • Lambda表达式是一个匿名方法,将行为像数据一样进行传递。

    • Lambda表达式的常见结构: BinaryOperator<Integer> add=(x, y) → x+y。

    • 函数接口指仅具有单个抽象方法的接口,用来表示Lambda表达式的类型。

    filter:

    过滤作用,filter里是一个Predicate 放回boolean

        @Test
        public void test(){
            List<String> collected= Stream.of("aaaa","baa","ccc","adcew")
                    .filter(s -> s.startsWith("a"))
                    .collect(Collectors.toList());
            System.out.println(collected);
        }

    map:

    如果有一个函数可以将一种类型的值转换成另外一种类型,map操作就可以使用该函数,将一个流中的值转换成一个新的流。

    传给map的Lambda表达式只接受一个类型参数,参数和返回值不必属于同一种类型,但是Lambda表达式必须是Function接口的一个实例,Function接口是只包含一个参数的普通函数接口。

        @Test
        public void test(){
            List<String> collected= Stream.of("a","b","c")
                    .map(s -> s.toUpperCase())
                    .collect(Collectors.toList());
            System.out.println(collected);
        }

    flatMap

    flatMap方法可用Stream替换值,然后将多个Stream连接成一个Stream

       @Test
        public void test(){
            List<Integer> collected= Stream.of(asList(1,2),asList(3,4))
                    .flatMap(number->number.stream())
                    .collect(toList());
            System.out.println(collected);
        }

    min

       @Test
        public void test() {
            List<Toy> toys= asList(new Toy("Toy1", 524),
    new Toy("Toy2", 378),
    new Toy("Toy3", 451));
    Toy min = toys.stream().min(Comparator.comparing(toy->toy.getLength())).get();
    System.out.println(min .getName()+min .getLength());
    }

    reduce

    reduce操作可以实现从一组值中生成一个值

    @Test
    public void test() {
    List<Track> tracks = asList(new Track("Bakai", 524),
    new Track("Violets for Your Furs", 378),
    new Track("Time Was", 451));
    Track minTrack = tracks.stream().min(Comparator.comparing(track -> track.getLength())).get();
    System.out.println(minTrack.getName()+minTrack.getLength());
    }
  • 相关阅读:
    对es6中Promise和async的理解
    js里面的map、filter、forEach、reduce、for in、for of等遍历方法
    浏览器怎么解析一个hmtl文档
    js获取浏览器版本
    js中的浅复制和深复制
    作为一个程序员,如何调试抓取跳转页面前发送的请求
    escape、unescape、encodeURIComponent、decodeURLComponent
    css超过一定长度显示省略号 强制换行
    gojs去除水印
    版本控制系统svn的超基础使用
  • 原文地址:https://www.cnblogs.com/shix0909/p/12875397.html
Copyright © 2011-2022 走看看