有没有办法使用 java 9 或 java 8 来简化这个循环?
for (String s : list) {
if (s.indexOf("D") != -1) {
numberList.addAll(getDoubleFromString(s));
} else {
if (s.indexOf(".") != -1) {
numberList.add(new TypeSatellite(BigDecimal.valueOf(Double.valueOf(s))));
} else {
numberList.add(new TypeSatellite(Integer.valueOf(s)));
}
}
}
这段代码确实可以使用 Java 8 进行编辑。首先,我们将以 list 声明如下的事实为指导:
让我们使用java.util.function.Predicate 中的函数式接口
第一个设置字符串是否包含“D”,第二个 - 一个点,如果前两个都为假,第三个将为真。接下来,我们可以使用Stream API填充 numberList 。
请注意, numberList 对象必须是 final 或 Effective -final。算法的复杂度将保持不变 O(N)。
下面一步一步做优化(主要难点是不清楚TypeSatellite接受什么,numberList有什么类型,所以写object'a):
1)你可以用 替换
s.indexOf(...) != -1,s.contains(...)也就是写类似2)可以取出通用代码
3)让我们拿出通用功能:
4)最后一步使用流