哪位高人能帮我优化一段 Java 代码,强迫症犯了。

2017-08-13 03:17:05 +08:00
 hsiunien

下面这段 if 简直不能忍, 效果就是通过字符串 rec 把 studentsList 赋值,求一个优雅点的,健壮的写法。

        String rec = ....
        if (rec != null) {
            Student[] students = convert(rec);
            if (students.length != 0) {
                studentsList = Arrays.asList(students);
            } else {
                studentsList = new ArrayList<>();
            }
        } else {
            studentsList = new ArrayList<>();
        }
        
6171 次点击
所在节点    程序员
44 条回复
pqee
2017-08-13 03:32:54 +08:00
你这个就是最健壮的,最好维护的。不过优雅就完全没有了。
luban
2017-08-13 04:01:25 +08:00
可以把这个移到最外层当作默认值 studentsList = new ArrayList<>();
wangdongjie0101
2017-08-13 04:14:19 +08:00
我觉得排版对齐就可以,写成这样肯定很乱呀。学下 python 的对齐
340244120
2017-08-13 05:46:08 +08:00
```
String rec = ...
if (rec != null && students.length != 0) {
Student[] students = convert(rec);
studentsList = Arrays.asList(students);
} else {
studentsList = new ArrayList<>();
}
```
340244120
2017-08-13 05:46:44 +08:00
```java
String rec = ...
if (rec != null && students.length != 0) {
Student[] students = convert(rec);
studentsList = Arrays.asList(students);
} else {
studentsList = new ArrayList<>();
}
```
340244120
2017-08-13 05:49:55 +08:00
为啥没有 md 效果!
netalpha
2017-08-13 05:55:43 +08:00
需要做一些改变,对你的方法. 去掉 if 唯一的优雅方式就是使用 java8.
我猜你得 rec 应该可以被 split, 所以:
rec.split(",")
.map(
str -> {
new Student();
}
)
.collect(
Collections.toList();
)

之类的. 剩下自己研究吧.大概是这么个样子.
GavinHao
2017-08-13 06:57:08 +08:00
@340244120 你 students 杂就直接上判断了?
zidian
2017-08-13 06:58:09 +08:00
convert
1. 能不能返回 List 而不是 Array ?
2. rec 是 null 的时候,返回空的 List

于是这段代码就变成一句话了

studentsList = convert(rec);
zjsxwc
2017-08-13 07:10:06 +08:00
```
Student[] students ;
studentsList = new ArrayList<>();
String rec = ....
boolean isStudentExists = (rec != null) && (students = convert(rec)) && (students.length > 0);
if (isStudentExists) {
studentsList = Arrays.asList(students);
}
```
zjsxwc
2017-08-13 07:14:31 +08:00
感觉写 java 是最不需要带脑子的
twm
2017-08-13 08:26:35 +08:00
换 scala 或 kotlin
padeoe
2017-08-13 08:30:23 +08:00
如果 convert 函数不在其他地方使用,可以让 convert 函数直接返回 list ?
其次,既然已经把 convert 返回的 Array 转成 List,一般是为了 List 的可变长,但 Arrays.asList(students)生成的 List 不是可变的,和 ArrayList 不大一样,要小心哦
yuanfnadi
2017-08-13 08:37:48 +08:00
@340244120 md 要四个点
yuanfnadi
2017-08-13 08:47:30 +08:00
````java
studentList = (rec != null && rec.length() > 0) ? Arrays.asList(covert(rec)) : new ArrayList<>();
````

这样会不会不好维护? covert 里面要做好异常判断。
而且返回结果一个是 list 一个是 arrayList 有点奇怪。
M3oM3oBug
2017-08-13 08:57:41 +08:00
既然 convert 方法可以解析错误的 rec 信息(也就是根据错误的 rec 返回的 students 可能为空),何不在 convert 里面添加一行错误判断呢,也就是把 rec 是否为空加到 convert 里。
话说我忘了 Arrays.asList 是否能接收空数组对象了,若能直接一行就 OK
cwek
2017-08-13 09:29:44 +08:00
String rec = ....
studentsList=Collections.<>emptyList();
if (rec != null) {
Student[] students = convert(rec);
if (students.length != 0) {
studentsList = Arrays.asList(students);
}
}
340244120
2017-08-13 10:05:30 +08:00
@GavinHao 看 Dota2TI 熬了一星期的夜,视野模糊了
@yuanfnadi 哈哈,讲道理就是三个点,可能只有主题才支持 md 吧。
--------------------------------------------------------
String rec = ...
Boolean flag ;
Student[] students;
if (rec != null) {
students = convert(rec);
if (students.length != 0) {
flag = true;
}
}
if (flag){
studentsList = Arrays.asList(students);
} else {
studentsList = new ArrayList<>();
}
hantsy
2017-08-13 10:13:06 +08:00
@netalpha 不错,终于看到有人用 Java8 了。
myv2ex
2017-08-13 10:16:07 +08:00
1.Arrays.asList 可以入空数组,convert 优化一下,可去除后续 if...else 判断,如果不优化,要做非 Null 判断
2.空 List 构造可以用 Collections.EMPTY_LIST

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

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

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

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

© 2021 V2EX