Java 8 函数式编程

Posted sixinshuier

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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());
}

以上是关于Java 8 函数式编程的主要内容,如果未能解决你的问题,请参考以下文章

深度探秘 Java 8 函数式编程(下)

Java 8 新语法习惯 (更轻松的函数式编程)

深度探秘 Java 8 函数式编程(上)

Java 8 函数式编程中“减少”函数的第三个参数的目的

浅谈Java 8的函数式编程

跟上 Java 8 : 函数式编程