Stream是为了操作集合(Collection)的,可以与ambda 表达式配合使用。
1- 创建流
//list转流
List<String> list = Arrays.asList("aa","bb","cc");
Stream<String> stream = list.stream();
//数组转流
Integer[] arry = {1,2,4};
Stream<Integer> streamarry = Arrays.stream(arry);
Stream<Integer> streamarry2 = Stream.of(arry);
2- 中间操作
//1- 过滤,从流中筛选出我们想要的元素
List<String> list1 = Arrays.asList("a","bb","ccc","dddd");
Stream<String> filter1 = list1.stream().filter(elem -> elem.length()>2);//["ccc", "dddd"]
Stream<String> filter2 = list1.stream().filter((elem) -> {
elem = elem.concat("ss");
return elem.length() >2;
});//["ccc", "dddd"]
//2- 映射,通过某种操作把一个流中的元素转化成新的流中的元素
Stream<Integer> stream2 = stream.map(elem -> elem.length());//[1,2,3,4]
//3- 匹配
List<String> list2 = Arrays.asList("a","bb","ccc","dddd");
boolean a = list2.stream().allMatch(elem -> elem.contains("aa")); //false
boolean b = list2.stream().anyMatch(elem -> elem.length() > 3); //true
boolean c = list2.stream().noneMatch(elem -> elem.equals("a")); //false
//4- 去重 distinct()
List<String> list3 = Arrays.asList("a", "a", "bb", "cc");
Stream<String> stream3 = list3.stream().distinct(); // ["a", "bb", "cc"]
//5- 跳过 skip()
List<String> list4 = Arrays.asList("a","bb","ccc","dddd");
Stream<String> stream4 = list4.stream().skip(2); // ["ccc", "dddd"]
//6- 截断 limit()
List<String> list5 = Arrays.asList("a","bb","ccc","dddd");
Stream<String> stream5 = list5.stream().limit(2); // ["a", "bb"]
//7- peek()
List<User> users = new ArrayList<>();
users.add(new User(11, "Bob"));
users.add(new User(18, "mayu"));
Stream<User> stream6 = users.stream().peek(elem -> elem.setAge(15));
//User{age=15, name='Bob'},User{age=15, name='mayu'}
3- 结束操作
// stream转list
List<String> stringList = stream.collect(Collectors.toList());
// stream转数组
String[] array = stream.toArray(String[]::new);