में कोशिश किए बिना लैम्ब्डा में अपवाद को संभालना, जहां तक मुझे पता है, लैम्बडा द्वारा लागू अपूर्ण विधि को throws
पर हस्ताक्षर में नहीं किया गया है, तो लैम्ब्डा में अपवाद को अपनाने में कोई भी संभाल नहीं सकता है।लैम्ब्डा
मुझे निम्नलिखित कोड का सामना करना पड़ा, यह काम करता है। openStream()
IOException
को संभालने की मांग क्यों नहीं करता है? मैं tryWithResources
में try-catch
देख सकता हूं लेकिन मुझे इसके पीछे तंत्र को समझ में नहीं आता है।
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.function.Function;
import java.util.function.Supplier;
public class Main {
public static <AUTOCLOSEABLE extends AutoCloseable, OUTPUT> Supplier<OUTPUT> tryWithResources(
Callable<AUTOCLOSEABLE> callable, Function<AUTOCLOSEABLE, Supplier<OUTPUT>> function,
Supplier<OUTPUT> defaultSupplier) {
return() -> {
try (AUTOCLOSEABLE autoCloseable = callable.call()) {
return function.apply(autoCloseable).get();
} catch (Throwable throwable) {
return defaultSupplier.get();
}
};
}
public static <INPUT, OUTPUT> Function<INPUT, OUTPUT> function(Supplier<OUTPUT> supplier) {
return i -> supplier.get();
}
public static void main(String... args) {
Map<String, Collection<String>> anagrams = new ConcurrentSkipListMap<>();
int count = tryWithResources(
() -> new BufferedReader(new InputStreamReader(
new URL("http://www.puzzlers.org/pub/wordlists/unixdict.txt").openStream())),
reader ->() -> reader.lines().parallel().mapToInt(word -> {
char[] chars = word.toCharArray();
Arrays.parallelSort(chars);
String key = Arrays.toString(chars);
Collection<String> collection = anagrams.computeIfAbsent(key, function(ArrayList::new));
collection.add(word);
return collection.size();
}).max().orElse(0),() -> 0).get();
anagrams.values().stream().filter(ana -> ana.size() >= count).forEach((list) -> {
for (String s : list)
System.out.print(s + " ");
System.out.println();
});
}
}
लेकिन यह सवाल यहां नहीं है। यह एक टिप्पणी है। – Tunaki