Java的Stream API
首先
大家好,你们都在用Java吗!最近我写的东西很多,但是自从实现了Stream API之后,感觉变得非常方便。
虽然我能迅速想到Stream.forEach和Stream.filter这样的常见用法,
但也有一些不常用的用法我想不起来,所以我打算留下备忘录。
流生成
创建一个无序的无限流。
这在生成随机数等无关紧要值时非常方便。
文件:文档
代码
public static void main(String[] args) {
Stream<Double> stream = Stream.generate(() -> Math.random());
stream.limit(5).forEach(System.out::println);
}
结果 (jié guǒ)
0.022804976867977667
0.06422820749702451
0.7240936837411123
0.9070898332933144
0.6724389714182997
流.anyMatch
如果有一个谓词(Predicate)作为参数,只要存在一个符合条件的值,就会返回true。
文件:文档
代碼
public static void main(String[] args) {
List<String> strList = Arrays.asList("dog", "cat", "bird");
boolean match = strList.stream().anyMatch(e -> e.equals("dog"));
System.out.println(match);
}
结果 (jié guǒ)
true
Stream.allMatch 检查流中的所有元素是否都满足给定的条件。
如果所有条件匹配,那么将 Predicate 作为参数的值返回为 true。
文件:文档
代码 (Mandarin Chinese translation)
public static void main(String[] args) {
List<String> strList = Arrays.asList("dog", "cat", "bird");
boolean match = strList.stream().allMatch(e -> e.equals("dog"));
System.out.println(match);
}
结局
false
Stream.noneMatch – 流.noneMatch
如果没有符合条件的值,将 Predicate 作为参数,返回 true。
文件:文档
翻译成中文:
程式码
public static void main(String[] args) {
List<String> strList = Arrays.asList("dog", "cat", "bird");
boolean match = strList.stream().noneMatch(e -> e.equals("fish"));
System.out.println(match);
}
结果 (jié guǒ)
true
流.取前N个
作为参数传入 Predicate,返回符合条件的值,例如下例中返回小于0的数字。
文件:文档
代码 mǎ)
public static void main(String[] args) {
List<Integer> numList = Arrays.asList(
-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
);
numList.stream().takeWhile(x -> x < 0).forEach(System.out::println);
}
结果 (jié guǒ) – result
-5
-4
-3
-2
-1
流.丢弃当 (liú.
将 Predicate 作为参数,返回不满足条件的值。
以下示例中将返回大于等于0的数字。
文件:文档
题目要求将”コード”以中文母语方式进行改写。
public static void main(String[] args) {
List<Integer> numList = Arrays.asList(
-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5
);
numList.stream().dropWhile(x -> x < 0).forEach(System.out::println);
}
结果
0
1
2
3
4
5
最後,最后的
StreamAPI非常方便,是吧。
我们应该积极使用它,朝着能够直观理解的代码目标前进。
虽然简短,但就是这样了。非常感谢!