一、Stream流作用
对集合或者数组进行操作,当想使用一个流的时候,基本包含三个步骤:获得一个数据源 --> 数据转换 -->执行操作,获取想要的结果。
二、Stream流方法
stream方法被分为两种:
延迟方法:返回值为stream,可以继续使用其他方法
终结方法:返回值不为stream类型的方法,使用后会关闭流
一、获取流
一、根据集合获取流
Collection.stream();
Map<String,Integer> map = Map.of("丁真",1,"王源",2);
Stream<String> streamkeys = map.keySet().stream();
Stream<Integer> streamvalues = map.values().stream();
Stream<Map.Entry<String,Integer>> streamentries = map.entrySet().stream();
二、根据数组获得流
Arrays.stream(array[]);
Stream.of(array[]);
String [] strings = {"华为","苹果","联想"};
Stream<String> stream1 = Arrays.stream(strings);
Stream<Integer> stream2 = Stream.of(strings);
二、forEach
forEach方法为终结方法,遍历集合,同时使用consumer消费对象,用完后会关闭流。
void forEach(Consumer<? super T> action);
List<String> list = List.of("迪丽热巴","古力娜扎","王源","丁真");
Stream<String> stream = list.stream();
stream.forEach((t) -> {
System.out.println(t);
});
三、filter
filter为延迟方法,用来筛选满足条件的元素
Stream filter(Predicate<? super T> predicate);
List<String> list = List.of("迪丽热巴","古力娜扎","保守派王源","维新派丁真");
Stream<String> stream = list.stream();
stream.filter(t -> t.length() == 5).forEach(System.out::println);
四、map
map为延迟方法,用来做数据类型转换
Stream map(Function)
List<String> list = List.of("迪丽热巴","古力娜扎","王源","丁真");
Stream<Person> stream = list.stream().map(t -> new Person(t,20));
stream.forEach(System.out::println);
五、limit
limit为延迟方法,用来取得前几个流元素
Stream limit(long n)
List<String> list = List.of("迪丽热巴","古力娜扎","王源","丁真");
Stream<String> stream = list.stream();
stream.limit(3).forEach(System.out::println);
六、skip
skip为延迟方法,用来跳过几个元素
Stream skip(long n)
List<String> list = List.of("迪丽热巴","古力娜扎","王源","丁真");
Stream<String> stream = list.stream();
stream.skip(2).forEach(System.out::println);
七、count
count为终结方法,用来返回流中的元素数量
long count()
List<String> list = List.of("迪丽热巴","古力娜扎","王源","丁真");
Stream<String> stream = list.stream();
System.out.println("流中元素数量为:" + stream.count());
八、concat
concat为延迟方法,用来合并两个流
static Stream concat(streamA,streamB)
Stream<String> streamAll = Stream.concat(stream1,stream2);