001 java为什么需要函数式编程

一 .概述

  集合是我们java程序员每天都需要的工具,没有了集合,java程序员几乎不能干任何的事情,我们每天的工作也是在对集合进行不同的操作.

  尽管集合的功能已经足够强大,但是当我们面对复杂的业务问题的时候,利用原始的集合操作就会变得让人恶心.

  于是在java8之中出现了lambda和stream的API,为我们以一种更加优雅的方式使用集合.

  没错,就是集合,当我们现在使用NOSQL,各种日志分析,等等的大数据操作的时候,我们不可能使用原始的数据库的sql操作帮助我们完成如排序,求和,分组等操作了,

  我们急缺一中工具来完成我们的任务,很让人高兴的一点就是,Stream做到了,并且很优雅.

那么,函数式编程式编程和Stream,lambda有什么关系呢? 就是因为java引入了函数式编程的编程范式来解决这个问题的,

  因此,我们的起点就应该是函数式编程.



二 .从函数式编程到lambda

  行为参数化,一个很抽象的概念,其实我们每天都在用,很像一种策略模式,如我们在js之中不断传入的回调函数一样.

  在java8之中,函数式编程的根基就是lambda,这是整个java函数式编程的基础.

  在这里不去说函数式编程的准确含义,因为没有人能说清楚.

  我们想在想做的就是引入lambda.

请看下面的例子:

  我们以前使用线程Runnable的方式:

Runnable runnable = new Runnable() {
            @Override
            public void run() {
                for(;;)
                    System.out.println("thread is running...");
            }

        };
        new Thread(runnable).start();

以前我们使用匿名内部类的方式来编写一个Runnbale的实现,其实在上面的代码之中,只有红色部分是有用的.

当我们编写了很多这样的代码之后,我们大概能够知道,我们其实就是想创建一种行为而已(或者说一种实现而已),根本没有必要每次都写大量的模板代码.

于是,在java8之中,我们可以写下面的代码.

new Thread(()->{
            for(;;)
                System.out.println("thread is running...");
        }).start();

嘿嘿,我们现在就编写了一个lambda的表达式来描述我们的行为.



三 .lambda表达式的本质

  lambda表达式的本质和匿名内部类是一样的,而且它的条件更加苛刻.

  下面的例子证明lambda和匿名内部类其实是一种事物:

Runnable run = ()->{
            for(;;)
                System.out.println("thread is running...");
        };

看到上面的代码没有编译的问题了吗? 这就证明lambda本质上就是一个匿名内部类的实现而已.

  从这里我们能够看到,即使java出现了lambda,从本质上还是没有推翻我们之前的世界观.

在上面,提到了lambda的条件更加苛刻,为什么呢?

  我们知道,一个匿名内部类可以实现多个方法,但是lambda却只能实现一个.

  因此,在java8之中为了更好地表达lambda的使用,出现了一个新的概念,就是函数式接口.

  看到了吗,lambda和函数式接口出现了,函数式接口本身就是为了lambda服务的.

那么,什么是函数式接口呢?很简单,就是一个接口(抽象类)内部仅仅只有一个待实现的方法,我们就称为函数式接口.

  为了表达这个概念,在java8之中使用一个注解表达这个概念,

public @interface FunctionalInterface {}

这个注解仅仅只是一个标记注解,能提供的作用仅仅是在编译之前指明语法错误,像@Override一样.

  即使一个接口没有这个注解,也不会妨碍这个接口成为一个函数式接口.



001 java为什么需要函数式编程

原文地址:https://www.cnblogs.com/trekxu/p/9420552.html

时间: 2024-11-05 18:39:19

001 java为什么需要函数式编程的相关文章

java自制简易函数式编程库初出炉

程序处理过程中的绝大多数运算,理想状况下都可以用简单优雅的数学语言加以描述. 而通常的代码多关注于这些逻辑的实现细节,臃肿而丑陋,所以产生了将抽象逻辑分离出来的想法. 是时候展现真正的技术了...一个简易的函数式编程库就这么诞生了... 作为函数式编程库,体现了以下特征: 1.以函数为基本复用单元的编程风格 2.用懒惰序列(对应于java中的Iterator)进行简单的数据交换 3.以函数.懒惰序列为核心的工具集 作为函数式编程库,未体现以下重要特征: 1.不可变数据结构(目前没有这种需求) 2

Scala:用于Java的轻量级函数式编程

Scala为Java开发提供了轻量级的代码选项,但是学习过程可能会很艰难.了解有关Scala的知识以及是否值得采用. 基于Java的语言通常涉及冗长的语法和特定于领域的语言,用于测试,解析和数值计算过程.这些事情可能是开发人员的祸根,因为成堆的重复代码需要开发人员花费更多的时间进行梳理才能发现错误. 作为一种通用的编程语言,Scala可以通过结合面向对象的样式和功能样式来帮助减轻这些问题.为了减轻语法复杂性,Scala还将命令性编程与功能性编程相融合,并且可以方便地使用其对庞大的Java库生态系

为什么函数式编程在Java中很危险?

摘要:函数式编程这个不温不火的语言由来已久.有人说,这一年它会很火,尽管它很难,这也正是你需要学习的理由.那么,为什么函数式编程在Java中很危险呢?也许这个疑问普遍存在于很多程序员的脑中,作者Elliotte对此发表了一些见解,我们一起来看看他是怎么说的. 在我的日常工作中,我身边的开发者大多是毕业于CS编程顶级院校比如MIT.CMU以及Chicago,他们初次涉及的语言是Haskell.Scheme及Lisp.他们认为函数式编程是一种自然的.直观的.美丽的且高效的编程样式.但奇怪的是,我和我

[Java 8] 函数式编程简介

思维方式的转变 以从一个城市集合中寻找是否存在Chicago为例: 习惯的方式 boolean found = false; for(String city : cities) { if(city.equals("Chicago")) { found = true; break; } } System.out.println("Found chicago?:" + found); 以上代码就是绝大多数开发人员在面对这个问题时的第一反应.它通过命令式风格(Impera

[连载]Swift开发入门(06)--- 函数式编程

??面向对象编程和函数式编程是目前最主流的两种编程范式,而关于这两种范式孰优孰劣的讨论一直都没有停止过.事实上,真正理解两种编程范式的程序员不会武断的说这二者孰优孰劣,因为任何编程语言都没有什么灵丹妙药让其使用者成为优秀的程序员.其实,像Java这样很经典的面向对象的编程语言,也能够看到函数式编程的影子,如果你使用过访问者模式.命令模式,如果你使用过接口回调,你实际上已经使用了函数式编程的理念,而且在新版本的Java中,已经开始支持Lambda表达式和函数式接口,这些都是Java为了支持函数式编

Java 中的函数式接口

概念 函数式接口在Java中是指:有且仅有一个抽象方法的接口. 函数式接口,即适用于函数式编程场景的接口.而Java中的函数式编程体现就是Lambda,所以函数式接口就是可 以适用于Lambda使用的接口.只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导. 备注:“语法糖”是指使用更加方便,但是原理不变的代码语法.例如在遍历集合时使用的for-each语法,其实 底层的实现原理仍然是迭代器,这便是“语法糖”.从应用层面来讲,Java中的Lambda可以被当做是匿名内

[Java] 函数式编程相关概念 - 笔记1

Java 8 引入了 lambda 表达式,以及函数式编程风格.在了解函数式编程过程中,做了些笔记,摘录于本文. 嵌套函数( Nested Function ) 1. 嵌套函数,是指在另一个函数里面定义的一个函数.外层的函数,这里简称为外层函数. 2. 函数的嵌套可以是多层嵌套.嵌套函数可以看到其全部的外层函数的非局部变量.在实际程序中,嵌套的层数一般很少.下面是一个三层嵌套的例子, innerOfInner 也可以访问在 outer 函数体重定义的变量 x . function outer()

[Java] 函数式编程相关概念 - 笔记2

匿名函数 ( Anonymous function ) 1. 匿名函数,是指没有被绑定到标识符的函数.根据字面意思,也可以理解为没有名字的函数. 2. 匿名函数通常: 1). 作为参数,被传递给高阶函数. 2). 作为高阶函数的返回值. 3. 在函数式编程语言,以及其他拥有头等函数的语言中,匿名函数比较普遍. 4. 在一些编程语言中,匿名函数被关键字 lambda 所标记.所以,匿名函数有也被称为Lambda 表达式 ( Lambda express ).例如,Python 就使用 lambda

paip.提升效率---filter map reduce 的java 函数式编程实现

#paip.提升效率---filter map reduce 的java 函数式编程实现 ======================================================== #----------------------index索引------------------++函数式编程的优点儿以及缺点++actual code 实际代码例如以下---filter 实现...--- map 实现..---reduce---调用 ##函数式编程的优点儿以及缺点------