Java8 的 Stream 写是写的爽,但是一遇到抛异常的货,就感觉咯噔一下。。

2019-05-22 15:21:13 +08:00
 yuankui
什么优雅,干净都不复存在了。
我 TMD 明明是个有追求的人,怎会写出这样的代码?

6093 次点击
所在节点    程序员
29 条回复
theTd
2019-05-22 15:31:19 +08:00
用 Callable 的话是可以吃掉受检性异常的吧?
xiaoidea
2019-05-22 15:33:05 +08:00
airfling
2019-05-22 15:39:42 +08:00
你至少要把那三个出现可能异常的的点解决掉,不太建议代码都写在这一块。每个方法的代码尽量不超过 10 行
mritd
2019-05-22 15:42:06 +08:00
如果线上这一串出现了空指针啥的...
yuankui
2019-05-22 15:42:44 +08:00
@xiaoidea 大意就是用一个不跑出 checkedException 的 lambda 去封装已有的咯?感觉还是咯噔。。
yuankui
2019-05-22 15:43:34 +08:00
@mritd 那就哭呗~哈 stream.filter(Objects::nonNull)
mooncakejs
2019-05-22 15:45:15 +08:00
io 相关感觉不太适合 stream,CompletableFuture 感觉更适合
xinyewdz
2019-05-22 15:46:05 +08:00
这代码,看的人也是头大。
BBCCBB
2019-05-22 15:47:06 +08:00
封装成一个方法,然后流里调该方法也许可破.
BBCCBB
2019-05-22 15:47:52 +08:00
或者将相应的 Function, Consumer 放到外面声明
chocotan
2019-05-22 15:50:36 +08:00
可以试下下 Try
javaslang 里的
passerbytiny
2019-05-22 15:52:20 +08:00
这是受检异常造成的,跟 Stream 有什么关系。而且你这个流干的东西也太多了吧,都要跨系统调用来获取数据了,这应该是高级流干的事,不应该是 API 级别的低级流干得事。
HuasLeung
2019-05-22 15:52:24 +08:00
java 8 的新特性 lambda 也是搞得我懵逼,一堆箭头函数跟写 es6 一样……
jinhan13789991
2019-05-22 15:57:26 +08:00
要不~试试 rxjava ? 对异常处理友好~
Sharuru
2019-05-22 15:59:59 +08:00
流略长……不要把以前的宽度问题转换成高度问题啊- -
x66
2019-05-22 16:11:26 +08:00
最怕的难道不是写了一大串,突然线上出一个空指针,根本找不到是哪一行的问题,那感觉简直绝望。
yuankui
2019-05-22 16:13:40 +08:00
不要吐槽太长嘛,我就算是短成俩行,他遇到异常,还是得咯噔一下
syhan
2019-05-22 16:16:40 +08:00
Try+1
reeco
2019-05-22 16:23:38 +08:00
用 JOOL 处理 checked exception
https://github.com/jOOQ/jOOL

before:

```
Arrays.stream(dir.listFiles()).forEach(file -> {
try {
System.out.println(file.getCanonicalPath());
}
catch (IOException e) {
throw new RuntimeException(e);
}

// Ouch, my fingers hurt! All this typing!
});
```

after:

```
Arrays.stream(dir.listFiles()).forEach(
Unchecked.consumer(file -> { System.out.println(file.getCanonicalPath()); })
);
```
yuankui
2019-05-22 16:26:47 +08:00
@theTd 嗯嗯

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

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

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

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

© 2021 V2EX