Lambda表达式总结

以下有5种表达式:

  1. 不需要参数,返回为5
    () -> 5
  2. 接收一个参数(数字类型),返回其2倍的值
    x -> 2*x
  3. 接收2个参数(数字),并返回它们的差值
    (x, y) -> x-y
  4. 接收2个int 型整数,返回他们的和
    (int x, int y) -> x+y
  5. 接收一个String对象,并在控制台打印,不返回任何值
    (string s) -> System.out.print(s)

对上面操作符的例子

public class test {

      public static void main( String[] args) {
            // TODO Auto-generated method stub
            //对list循环遍历操作
            String[] atp = {"Rafael Nadal" , "Novak Djokovic" ,
                       "Stanislas Wawrinka" ,
                       "David Ferrer" ,"Roger Federer" ,
                       "Andy Murray" ,"Tomas Berdych" ,
                       "Juan Martin Del Potro" };

            List< String> palyers = Arrays . asList( atp);
            //String player = null;

//         for (String player : palyer) {
//              System.out.println(player + ";");
//         }

            //使用lambda表达式以及函数操作
            //palyers.forEach((player) -> System.out.println(player + ";"));
            //在java8中使用双冒号操作符
            //palyers.forEach(System.out:: println);

            /**----------------------------- */
            //对匿名类操作
            //1.1使用匿名内部类
//         new Thread(new Runnable() {
//
//              @Override
//              public void run() {
//                   System.out.println("Hello world!");
//              }
//         }).start();

            //1.2使用lambda
            //new Thread(() -> System.out.println("Hello world")).start();

            //2.1使用匿名内部类
            Runnable racel = new Runnable() {

                 @Override
                 public void run() {
                      // TODO Auto-generated method stub
                      System. out .println ("hello world" );
                 }
            };

            Runnable rece2 = () -> System. out .println ("hello world");

           racel .run ();
           rece2 .run ();

            /**-------------------------------- */
            //1.1使用匿名内部类根据name排序player
            Arrays. sort (atp , new Comparator< String>() {

                 @Override
                 public int compare( String o1 , String o2 ) {
                      // TODO Auto-generated method stub
                      return o1. compareTo( o2);
                 }
            });
            //使用lambda 排序
            Arrays. sort (atp , (String o1 , String o2) -> ( o1. compareTo( o2)));


      }
}
  • 使用lambdas和Streams
    ( Stream是对集合的包装,通常和lambda一起使用。 使用lambdas可以支持许多操作,如 map, filter, limit, sorted, count, min, max, sum, collect 等等。 同样,Stream使用懒运算,他们并不会真正地读取所有数据,)

  • Consumer 接口(还不知道是什么东西),重点参考这个:
    Java8揭秘(二)Java 8中的 Lambda表达式

函数接口如刚才讲的,Lambda表达式在运行期表示为一个函数接口(functionalinterface)(或者说一个SAM类型),函数接口是一种只定义了一个抽象方法的接口。尽管JDK已经有一些接口都符合函数接口定义,比如Runnable 和 Comparator,但是这对API演进来说是显然不够的。我们又不能到处在代码里使用像Runnable这样的接口,因为这么做不合乎逻辑。
JDK8中新增了一个包,java.util.function,这个包里有一些专门给新增的API使用的函数接口。此处就不列出所有的函数接口了,有兴趣可以自行学习下java.util.function:)
下面列出几个java.util.function中定义的接口,都非常有趣:

  • Consumer – 在T上执行一个操作,无返回结果
  • Supplier –无输入参数,返回T的实例
  • Predicate –输入参数为T的实例,返回boolean值
  • Function
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值