stream是java 8 的新特性之一,使用stream可以很方便的将集合或者数组进行筛选、去重、查找、过滤、限制、映射等操作。用好stream可以是你的代码更加简洁,干净、高效,本文主要介绍stream的创建方式,java 8提供了非常丰富的创建stream的方式,主要分成三大类:Stream类提供的静态工厂方法、Arrays和Collection类的默认方法stream()、其他方法,本文主要介绍前两类常用的创建方法。
1、使用stream的of方法创建stream,该方法创建的stream
@Test
public void testOf(){
//使用stream的of方法创建stream
Stream<String> stringStream = Stream.of("hello", "hi", "hei");
stringStream.forEach(System.out::println);
}
结果:
2、使用stream的generate方法创建stream,长度是无限长的,如果没有limit()方法,程序会一直打印下去
@Test
public void testGenerate(){
//使用stream的generate方法创建stream,长度是无限长的
Stream<Integer> stringStream = Stream.generate(() -> (int) (Math.random() * 1000));
stringStream.limit(100).forEach(System.out::println);
}
结果:
3、使用stream的iterate方法创建stream,长度是无限长的,iterate有两个参数,第一个参数是初始元素的之,第二个元素是一个UnaryOperator对象,定义每次元素的变化规则
@Test
public void testIterate(){
//使用stream的iterate方法创建stream,长度是无限长的
Stream<Integer> stringStream = Stream.iterate(2, i -> i + 1);
stringStream.limit(10).forEach(System.out::println);
}
结果:
4、使用collection的stream方法创建stream
@Test
public void testCollection(){
//使用collection的stream方法创建stream
List<String> names = new ArrayList<>();
names.add("李世民");
names.add("唐僧");
names.add("悟空");
names.add("八戒");
names.add("沙僧");
names.add("白龙马");
//过滤掉长度大于或等于3的名字
names.stream().filter(s -> s.length() < 3).forEach(System.out::println);
}
结果:
5、使用Array的stream方法创建stream
@Test
public void testArray(){
//使用Array的stream方法创建stream
String[] fruits = {
"火龙果", "山竹", "葡萄", "香蕉",
"蛇果", "奇异果", "海棠果", "青枣",
"开心果", "牛油果", "白果", "布朗果",
"可可果", "芝果"
};
//查询带有“果”字的水果并打印出来
Arrays.stream(fruits).filter(s -> s.contains("果")).forEach(System.out::println);
}
结果:
除了以上方法之外,还可以使用Random.ints()、BitSet.stream()、JarFile.stream()、Pattern.splitAsStream(java.lang.CharSequence)、Files.lines(java.nio.file.Path)等方法创建,这里就不展开介绍了