Java8 的函数式编程支持,我学习后觉得很沮丧和鸡肋

2019-10-10 19:16:07 +08:00
 zazalu

不知道是我问题还是什么,就感觉怪怪的

10826 次点击
所在节点    Java
72 条回复
soeur
2019-10-11 09:17:44 +08:00
我觉得挺好用的呀
Jrue0011
2019-10-11 09:18:00 +08:00
大概是这样,手写没有编译器警告可能会有错误。。但是是能实现的

import java.util.function.*;

class I {
@Override
public String toString() { return "I"; }

public O println() {
System.out.println(this);
return new O();
}
}

class O {
@Override
public String toString() { return "O"; }

public O println() {
System.out.println(this);
return this;
}
}

public class TransformFunction {
static Function<I,O> transform(Function<I,O> in) {
return in.andThen(O::println);
}

public static void main(String[] args) {
Function<I,O> f2 = transform(I::println);
O o = f2.apply(new I());
}
}
LeeSeoung
2019-10-11 09:22:35 +08:00
技术每天都在更新,不是你能挑三拣四的时候,今天还在为掌握了这些而满足的时候,明天就有一个更高效的技术就替代它了,一生都需要学习。
zzxop
2019-10-11 09:31:57 +08:00
建议你再看一下,了解了之后肯定不想再用以前的方法
guolaopi
2019-10-11 09:32:13 +08:00
我一直以为 java 跟 C#一样老早就支持这么写了(一脸懵逼
buckbuckgo
2019-10-11 09:36:16 +08:00
我自己是熟悉的功能性接口(比如 Runnable, OnClickListener)用 lambda 很简洁, 自己也清楚, 不熟悉不常用的仍旧用 匿名对象
zazalu
2019-10-11 09:36:59 +08:00
@zzxop 嗯,在看,新手第一次接触 Java 的 FP
zazalu
2019-10-11 09:38:41 +08:00
@guolaopi java8 挺早的了!只不过我参与的项目开始用 8 版本是最近的事情 orz,之前一直 1.7
softtwilight
2019-10-11 09:53:39 +08:00
刚开始不熟悉正常的,大脑比较讨厌改变,多用用就能感受到好了,函数编程最主要的是对思维模式的影响,你对问题的抽象完全不一样了
Aresxue
2019-10-11 10:18:14 +08:00
性能稍差点,但是可读性上升了很多,前提是你习惯函数式编程的思维,毕竟面向对象的编程其实和人类思维的代沟还是差蛮多的
kansyoukyou
2019-10-11 10:57:57 +08:00
从 Java7 一路写过来的,觉得 Stream 和 FP 结合还是很好用的
Kamiyu0087
2019-10-11 11:00:58 +08:00
函数式编程真的大大提高代码可读性
真心建议啃下来,其实一点不难的
djFFFFF
2019-10-11 11:04:32 +08:00
之前接触过 Python 或者 Scala 的话,沮丧是很正常的。Java 8 的实现一点都不优雅。没接触的话,应该是你还没从 oop 的思路转过来。
djFFFFF
2019-10-11 11:06:55 +08:00
补充一下 @qping 的例子:

Python 版:
`[t.getTableName() for t in tables]`

Scala 版:
`tables.map(_.getTableName())`
lihongjie0209
2019-10-11 11:13:42 +08:00
@djFFFFF #34 scala 版本可以使用 vavr 实现。

python 版本的是列表解析, 不上常规意义上的 map。
djFFFFF
2019-10-11 11:18:21 +08:00
@lihongjie0209 嗯,python 这个是语法糖,不是函数式编程。vavr 看了下感觉还是很笨重
feelinglucky
2019-10-11 11:42:30 +08:00
建议啃下来,真的
Orenoid
2019-10-11 11:55:54 +08:00
@djFFFFF #34 python 不是也有 map filter reduce 吗
lazyfighter
2019-10-11 11:59:51 +08:00
我把他称之为,写着舒服看着难受,至于上面的 demo,都是太简单了,你见过上百行的 stream 处理吗,各种类型转换看着头都大了
by73
2019-10-11 12:04:31 +08:00
是很鸡肋,连 pattern matching 都没有(逃

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/607994

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX