Loading

一行代码完成一个功能,高效简洁,不拖泥带水。

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

 

posted @ 2022-03-04 18:05  我心如雷  阅读(87)  评论(0)    收藏  举报