zoukankan      html  css  js  c++  java
  • jdk8-Lambda简介

    为什么使用Lambda

    Lambda可以使表达更加简洁,jdk8之前要想向方法传入一个函数逻辑,不得不去实现一个接口,jdk8带来的Lambda表达式可以将函数作为参数直接传入方法内(至少看起来是这样)。

    说起Lambda在jdk8中强大,就不得不提jdk8带来的Stream API,Stream API分为中间操作和终端操作,

    常用的中间操作包括:filter(过滤), map(映射,比如将某个对象映射为其唯一ID), distinct(使用equals去重), sorted(使用Comparator排序), skip(跳过n个), limit(限制最大个数n)

    常用的终端操作包括:

    1. forEach(遍历), toArray(返回数组), collect(将处理好的流收集到一个容器中,比如List), reduce(聚合), count, min(使用Comparator取最小), max
    2. findFirst, findAny, anyMatch, allMatch, noneMatch

    函数接口

    1 @FunctionalInterface
    2 public interface Comparator<T> {
    3   int compare(T o1, T o2);
    4   boolean equals(Object obj);
    5   //other methods ...
    6 }

    Comparator就是一个函数接口,所谓函数是指只有一个有效抽象方法的接口,这里的有效抽象方法不包括Object中的方法,任何一个只有一个有效抽象方法的接口都可以作为函数接口使用,即便没有被@FunctionalInterface注解。

    函数接口是如何工作的呢?

    1 List<String> list = new ArrayList<>();
    2 //add elements ...
    3 list.stream().filter(p -> p.length() > 3);

    filter的入参是一个Predicate函数接口,该函数接口有一个抽象方法test,可以将filter(Predicate predicate)看成是如下处理

     1 Stream<T> filter(Predicate<? super T> predicate){
     2     for (each string in stream){
     3          if(predicate.test(string)){
     4              keep the string
     5          }else{
     6              drop the string
     7          }
     8  
     9     return stream;
    10 }
  • 相关阅读:
    我的WCF之旅(1):创建一个简单的WCF程序
    网页设计中颜色的搭配
    CSS HACK:全面兼容IE6/IE7/IE8/FF的CSS HACK
    UVa 1326 Jurassic Remains
    UVa 10340 All in All
    UVa 673 Parentheses Balance
    UVa 442 Matrix Chain Multiplication
    UVa 10970 Big Chocolate
    UVa 679 Dropping Balls
    UVa 133 The Dole Queue
  • 原文地址:https://www.cnblogs.com/holoyong/p/7512958.html
Copyright © 2011-2022 走看看