簡體   English   中英

如何避免使用流和 if else 語句?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM