Stream流运算

java.util.stream 
Interface Stream<T>

两种方式可以获取到流:

1.Collection 接口下有一个方法stream();
default Stream<E> stream()
返回一个顺序Stream与此集合作为其来源。

2.Stream接口种有一个方法 of 方法:

static <T> Stream<T> of(T... values)
返回其元素是指定值的顺序排序流。

public class TestStream {
/*题目:
 * 筛选:
 * 1.ID必须是偶数
 * 2.年龄必须大于20
 * 3.用户名转换成小写
 * 4.用户名字母倒着排序
 * 5.只输出一个用户
 */
    public static void main(String[] args) {
        User user1 = new User(1,"A",18);
        User user2 = new User(2,"B",22);
        User user3 = new User(3,"C",20);
        User user4 = new User(4,"D",25);
        User user5 = new User(5,"E",16);
        User user6 = new User(7,"F",21);
        
        //集合就是存储
        List<User> list = Arrays.asList(user1,user2,user3,user4,user5,user6);
        
        //计算交给流
//        list.stream().filter((user)->{return user.getId()%2 == 0;});
        list.stream()
            .filter(user->user.getId()%2 == 0)
            .filter(user->user.getAge()>20)
            .map((user)->{return user.getName().toLowerCase();})
            .sorted((user11,user22)-> {return user22.compareTo(user11);})
            .limit(1)
            .forEach(System.out::println);                
    }

}

 

流种的几个方法:

1.终结方法:返回值不再是流,不能进行链式编程

void forEach(Consumer<? super T> action) 对此流的每个元素执行操作。

long count()  返回此流中的元素数

2.延迟方法:返回值仍然是流,可以进行链式编程

Stream<T> filter(Predicate<? super T> predicate) 返回由与此给定谓词匹配的此流的元素组成的流。
<R> Stream<R> map(Function<? super T,? extends R> mapper) 返回由给定函数应用于此流的元素的结果组成的流。
Stream<T> sorted(Comparator<? super T> comparator) 返回由该流的元素组成的流,根据提供的Comparator进行排序
Stream<T> limit(long maxSize) 返回由该流的元素组成的流,截断长度不能超过maxSize 。
static <T> Stream<T> concat(Stream<? extends T> a,Stream<? extends T> b) 创建一个懒惰连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素

posted @ 2020-11-19 17:51  Joyce502  阅读(125)  评论(0)    收藏  举报