public static void main(String[] args) {
//排序
// sorted():自然排序,流中元素需实现Comparable接口
// sorted(Comparator com):定制排序,自定义Comparator排序器
User user1 = new User("g", "1", "1");
User user2 = new User("b", "2", "2");
User user3 = new User("a", "3", "2");
List<User> userList = Arrays.asList(user1, user2, user3);
userList.stream().sorted(
(o1, o2) -> {
if (o1.getName().equals(o2.getName())){
return Integer.parseInt(o1.getAge()) - Integer.parseInt(o2.getAge());
}else {
return o1.getName().compareTo(o2.getName());
}
}
).forEach(System.out::println);
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//映射
// map:接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素。
// flatMap:接收一个函数作为参数,将流中的每个值都换成另一个流,然后把所有流连接成一个流。
List<String> list = Arrays.asList("a,b,c", "1,2,3");
list.stream().map(s -> s.replaceAll(",","")).forEach(System.out::print);
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
list.stream().flatMap(s -> {
String[] split = s.split(",");
Stream<String> stream = Arrays.stream(split);
return stream;
}).forEach(System.out::print);
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//筛选与切片
// filter:过滤流中的某些元素
// limit(n):获取n个元素
// skip(n):跳过n元素,配合limit(n)可实现分页
// distinct:通过流中元素的 hashCode() 和 equals() 去除重复元素
Integer[] s = {1,2,3,4,5,6,7,8};
Stream<Integer> stream = Arrays.stream(s);
Stream<Integer> newStream = stream.filter(s1 -> s1 > 3).
distinct()//4,5,6,7,8
.skip(2)//6,7,8
.limit(2);//6,7
newStream.forEach(System.out::println);
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//消费
// peek:如同于map,能得到流中的每一个元素。但map接收的是一个Function表达式,有返回值;而peek接收的是Consumer表达式,没有返回值。
User user4 = new User("g", "1", "1");
User user5 = new User("b", "2", "2");
List<User> users = Arrays.asList(user4, user5);
users.stream().peek(o -> o.setAge("95")).forEach(System.out::println);
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//匹配、聚合操作
// allMatch:接收一个 Predicate 函数,当流中每个元素都符合该断言时才返回true,否则返回false
// noneMatch:接收一个 Predicate 函数,当流中每个元素都不符合该断言时才返回true,否则返回false
// anyMatch:接收一个 Predicate 函数,只要流中有一个元素满足该断言则返回true,否则返回false
// findFirst:返回流中第一个元素
// findAny:返回流中的任意元素
// count:返回流中元素的总个数
// max:返回流中元素最大值
// min:返回流中元素最小值
List<Integer> intList = Arrays.asList(1, 2, 3, 4, 5);
Integer integer = intList.stream().findFirst().get();
System.out.println(integer);
Integer integer1 = intList.stream().max(Integer::compareTo).get();
System.out.println(integer1);
}