java 板


LINE

※ 引述《brianhsu (坟墓)》之铭言: : ※ 引述《PsMonkey (痞子军团团长)》之铭言: : : 来闲聊一下... : : 说真的,我觉得这个范例糟糕透了 : : 怎麽看都觉得第一个比较简单阿... [翻桌] : : 不然光比较字数也可以阿... Orz : 我没有仔细看文章,所以不确定是不是 API 设计上的问题。XD : 但是在 Scala 里面因为 filter 本身回传的就是另一个同种类的 Collection, : 例如你是 List.filter 他就会回传另一个 List,你是 Set.filter 就会回传 : 另一个 Set,所以会 filter 版会比 loop 版来得简洁: : case class Person(name: String, age: Int) : val personList = List(Person("Man1", 30), Person("Man2", 40)) : val olderThan30 = personList.filter(_.age > 30) : Java 的版本看起来比较复杂应该是多了後面那个 collect 和前面的 stream 吧? : 其实主要的逻辑只有 filter 而已,如果 Java 的版本能够变成: : List<Person> olderThan30 = personList.filter(p -> p.age > 30) : 就会比回圈式的简单易懂多啦。XDDD Java 之所以没有如此实作, 是因为在 Java 的 collection 中,传回原本型态的新 instance 并不是那麽简单的事。 * * * 假设标准 library 中的 `LinkedList<T>` 有一个 `filter` 方法 public class LinkedList<T> extends ... implements .... { // ... public LinkedList<T> filter(Predicate<T> pred) { // ... } // ... } 现在我们想用 `RichLinkedList<T>` 扩充 `LinkedList<T>` 的功能 我们让 `RichLinkedList<T>` 继承 `LinkedList<T>` class RichLinkedList<T> extends LinkedList<T> { void dummy() {} } 这样应该是没问题吧...... new RichLinkedList<Object>().dummy(); 但这样就会出事了: new RichLinkedList<Object>().filter(x -> true).dummy(); // compile time error 因为 `filter` 传回的事实上是一个 `LinkedList` 而非 `RichLinkedList` ! 有没有解决方法? 在 Java 里, 除了把这些方法全部 @Override 之外,答案似乎是没有...... 而在 Scala 中, `filter`, `map` ...... 等方法会接收一个 `CanBuildFrom` 型态的 implicit parameter ...... (下略) * * * 我承认我其实也搞不懂 `CanBuildFrom` ...... OTZ --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.43.179.206
1F:推 stimim:嗯,java 继承了以後回传型态不会跟着升级有时候很烦 04/03 19:24
※ 编辑: coolcomm 来自: 114.43.179.206 (04/03 19:49)
2F:推 Chikei:CanBuildFrom概念上是Builder factory,所以scala可以说是 04/04 03:33
3F:→ Chikei:会推导范例里collect()所需参数,并在前面的call一并执行 04/04 03:37
4F:推 brianhsu:偷偷推一下自己的: http://0rz.tw/Xy3EQ 04/04 12:47
5F:→ brianhsu:http://0rz.tw/mcZnb CanBuildFrom 其实没有很难懂。:p 04/04 12:49
6F:→ coolcomm:这两篇对 CanBuildFrom只提到一句话啊=3= 04/05 01:06
7F:→ coolcomm:我最搞不懂的是编译器到底会去哪些地方抓implicit... 04/05 01:08
8F:→ firose:我最搞不懂scala编译器如何推导泛型参数 04/05 09:14
9F:→ Chikei:http://goo.gl/JRoNG 第二段在说哪边抓implicit 04/06 01:46
10F:→ coolcomm:楼上那篇感觉好可怕XD 04/06 01:52
11F:→ Chikei:因为implicit的来源有点多,所以在比优先权的时候有点长XD 04/06 02:00
12F:→ Chikei:只是要搞清楚可能来源的话就看前两段就好 04/06 02:01
13F:→ coolcomm:http://ppt.cc/NWaJ 这篇是更正版 清楚多了...... 04/06 22:04
14F:→ brianhsu:因为CanBuildFrom就是Typeclass,所以一句就够了(逃 04/08 17:25







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Soft_Job站内搜寻

TOP