[英]How can I avoid using streams and if else statements?
我正在为我的 Spring Web 页面的向下钻取页面编写功能。
这一切都有效,但我想简化它,所以它不会那么长。 我能做些什么不同的事情?
理想情况下,我不想使用流。
List<Long> longNumbers = List.of(s.split(", ")).stream().map(num -> Long.parseLong(num)).collect(toList());
long nr = longNumbers.get(0);
long nr2 = 0;
if (longNumbers.size() < 2) {
nr2 = longNumbers.get(0);
}
else {
nr2 = longNumbers.get(1);
}
long nr3 = 0;
if (longNumbers.size() < 3) {
nr3 = longNumbers.get(0);
}
else {
nr3 = longNumbers.get(2);
}
没有流,没有if
解决方案 - 使用java.util.Scanner
。 大意:
var scanner = new Scanner(s).useDelimiter(", ");
var nr = scanner.nextLong();
var nr2 = scanner.hasNextLong() ? scanner.nextLong() : nr;
var nr3 = scanner.hasNextLong() ? scanner.nextLong() : nr;
只是没有if
解决方案,流位改变(没有使用List
)
long[] longNumbers = Pattern.compile(", ")
.splitAsStream(s)
.mapToLong(Long::parseLong)
.toArray();
long nr = longNumbers[0];
long nr2 = longNumbers.length < 2 ? nr : longNumbers[1];
long nr3 = longNumbers.length < 3 ? nr : longNumbers[2];
第一个选项,摆脱 stream:使用任何类型的循环 第二个选项,如果您知道 s 不超过 3 个值,您可以使用带有捕获组的正则表达式。 但这将至少是两倍难以理解。
就我个人而言,我会保留 stream (一旦你习惯了它,它通常比循环更易读),但删除重复的 ifs。
添加一个 getOrDefault 方法
private Long getOrDefault(List<Long> longNumbers, int index) {
if (longNumbers.size() < index+1) return longNumbers.get(0)
else return longNumber.get(index)
}
然后,而不是在任何地方重复 if 你只是做
List<Long>.... your stream stuff
nr = longNumber.get(0);
nr2=getOrDefault(longNumbers, 1);
nr3=getOrDefault(longNumbers, 2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.