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