簡體   English   中英

用於檢查for循環內條件的最短代碼

[英]Shortest code to check condition inside for-loop

該代碼的最短形式是什么?

List<String> supported = Arrays.asList("...");
boolean isSupported = false;
for(String s : supported) {
    if(url.startsWith(s)) {
       isSupported = true;
       break;
    }
}

還是這是檢查for循環內條件的最短形式?

如果您使用的是Java 8,則可以在Stream API的幫助下一行完成此操作:

boolean isSupported = supported.stream().anyMatch(s -> url.startsWith(s));

@Azel +1給出的Java 8答案很苗條,可能是您當前設計中可以給出的最佳答案。 但是,我過去遇到過與您類似的問題,並且發現更好的方法是通過主機識別URL,而不僅僅是通過任意的開始子字符串識別URL。 我最終要做的是創建主機映射。 然后,我將每個傳入的URL與該Map ,如下所示:

Map<String, Integer> hosts = new HashMap<>();
hosts.add("google.com", 1);
hosts.add("stackoverflow.com", 1);
hosts.add("wordpress.com", 1);

URL url = new URL("http://www.google.com");
String host = url.getHost();

if (hosts.containsKey(host)) {
    System.out.println("Found " + url + " in list of approved hosts.");
}

這里的基本思想是,我們甚至不需要迭代已批准域的列表,我們只需針對白名單(或黑名單)進行恆定時間查找即可。

實際上,您可以使用Java屬性文件存儲已知主機的列表,然后在需要時加載它。

這是最短的數組

boolean isSupported = false;
for(String s : supported)
  if(isSupported = url.startsWith(s)) break;

您可以創建一種方法來簡化它。 我假設您正在使用數組,但這也可以用於列表。

boolean containsURL(String[] array, URL url) {
    for (String s : array)
        if (url.startsWith(s))
            return true;
    return false;
}

isSupported = containsURL(supported, url);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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