一行程式碼完成一個功能,高效簡潔,不拖泥帶水。
阿新 • • 發佈:2022-03-04
1、對列表/陣列中的每個元素都乘以2
// Range是半開區間,range(1,10)表示定義一個1到10(不包括10)的遍歷器 int [] ia = range(1, 10).map(i -> i * 2).toArray(); List<Integer> result = range(1, 10).map(i -> i * 2).boxed().collect(toList());
2、計算集合/陣列中的數字之和
// limit(1000)表示取0-1000條,reduce第一個引數0表示如果呼叫的集合為空返回的預設值 range(1, 1000).sum(); range(1, 1000).reduce(0, Integer::sum); Stream.iterate(0, i -> i + 1).limit(1000).reduce(0, Integer::sum); IntStream.iterate(0, i -> i + 1).limit(1000).reduce(0, Integer::sum);
3、驗證字串是否包含集合中的某一字串
final List<String> keywords = Arrays.asList("brown", "fox", "dog", "pangram"); final String tweet = "The quick brown fox jumps over a lazy dog. #pangram http://www.rinkworks.com/words/pangrams.shtml"; keywords.stream().anyMatch(tweet::contains); keywords.stream().reduce(false, (b, keyword) -> b || tweet.contains(keyword), (l, r) -> l || r);
4、讀取檔案內容
// 原始使用BufferedReader時會使用try catch finally 在finally中.close()關閉資源,現在使用這樣寫法可以自動關閉資源
try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) { String fileText = reader.lines().reduce("", String::concat); }try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) { List<String> fileLines = reader.lines().collect(toCollection(LinkedList<String>::new)); } try (Stream<String> lines = Files.lines(new File("data.txt").toPath(), Charset.defaultCharset())) { List<String> fileLines = lines.collect(toCollection(LinkedList<String>::new)); }
5、過濾並分組集合中的數字
// groupingBy表示根據括號內的分類,例如括號現在裝的是passed和failed,collect後的map的key就只有"passed"或"failed"
Map<String, List<Integer>> result = Stream.of(49, 58, 76, 82, 88, 90).collect(groupingBy(i -> i > 60 ? "passed" : "failed"));
6、並行流執行迴圈
list.parallelStream().forEach(item -> item++);
7、獲取列表中最小最大
// min最小 max最大
int min = Stream.of(14, 35, -7, 46, 98).reduce(Integer::min).get();
8、集合上篩選
//篩選出至少有一個track評級4分以上的專輯,並按照名稱排序後打印出來。 albums.stream() .filter(a -> a.tracks.stream().anyMatch(t -> (t.rating >= 4))) .sorted(comparing(album -> album.name)) .forEach(album -> System.out.println(album.name));