1. 程式人生 > 其它 >一行程式碼完成一個功能,高效簡潔,不拖泥帶水。

一行程式碼完成一個功能,高效簡潔,不拖泥帶水。

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));