stream().collect常用操作/stream流的操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stream().collect常用操作/stream流的操作相关的知识,希望对你有一定的参考价值。

参考技术A package com.csw.shuanfa;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**

import com.csw.shuanfa.User;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class StreamUserTest
/**
* https://www.jb51.net/article/193458.htm
*
* @param args
*/
public static void main(String[] args)
List<User> list = new ArrayList();
list.add(new User("张三", 1, null));
list.add(new User("张三", 2, "接招"));
list.add(new User("李四", 3, null));


###########################################################package com.csw.shuanfa.jdk;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors
public class UserPO
private String name;
private Double score;

package com.csw.shuanfa.jdk;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.DoubleSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**

Java 8常用的流操作

以下都是我从《java 8函数式编程》看到的,
collect(toList())
collect(toList())方法是由stream里面的值生成的一个列表,是一个及早求值的操作。
List<Integer> list = Stream.of(1,2,3,4,5,).collect(Collectors.toList());

assertEquals(Arrays.asList(1,2,3,,4,5),List);
上面 程序讲述的是从Stream中生成一个列表。很多Stream操作都是惰性求值,因此调用Stream上一个系列的方法之后,还需要最后调用一个类似collect的及早求值方法。

map
假设函数可以将一种类型的值转换成另外一种类型,map操作就可以使用该函数,将流中的值转换成一个新的流,如map将字符串转换为大写形式
List<String> collect = Stream.of("a","b","hello").map(String->string.toUpperCase()).collect(toList());

assertEqual(asList("A","B","HELLO"),collect);
传给map的Lambda表达式只接受一个String类型的参数,返回一个新的string。参数和返回值不必属于同一种类型,但是lambda表达式必须是Function接口的一个实例。

filter
遍历数据并检查其中的元素时,可尝试使用stream提供新的方法
以往我们都是循环遍历列表,使用条件语句做判断。这可以被称为filter模式。
List<String> beginningWithNumbers = Stream.of("a","1abc","abc1").filter(value->isDigit(value.charAt(0)))
.collect(toList());
filter也是接受一个函数作为参数,该函数用Lambda表达式表示。

flatMap
flatMap方法可以用Stream替换值,然后将多个Stream连接成一个Stream。Map操作是用一个新的值代替Stream中的值。但是,用户希望让map操作有点不一样,生成一个新的Stream对象来替换。用户不希望结果是一连串的流,此时flatMap最能派上用场。
List<Integer> together = Stream.of(asList(1,2),asList(3,4)).flatMap(number ->numbers.stream()).collect(toList());
assertEquals(asList(1,2,3,4),together);
调用stream方法,将每个列表转换成stream对象,其余部分由flatMap方法处理。flatMap方法的相关函数接口和map的方法一样,都是Functio接口,只是方法的返回值限定为Stream类型。

max和min
Stream上常用的操作之一就是求最大值和最小值。Stream API中的max和min操作足以解决这一问题。
Stream查找最短曲目
List<Track> tracks = asList(new Track("Bakai",524),
new Track("Violets for Your Furs",378),
new Track("Time Was",451));

Track shortestTrack = track.stream().min((Comparator.comparing(track ->track.getLength())).get();

assertEquals(tracks.get(1),shortestTrack);
查找Stream中的最大或最小元素,首先考虑排序的指标。为了让Stream对象按照曲目长度进行排序,需要传给他一个comparator对象。java8 提供一个新的静态方法compaing,使用它可以方便地实现一个比较器。

以上是关于stream().collect常用操作/stream流的操作的主要内容,如果未能解决你的问题,请参考以下文章

java8 Lambda Stream collect Collectors 常用实例

Effective Java 第三版——47. 优先使用Collection而不是Stream来作为方法的返回类型

java8中stream().collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator)说明

Java中两种获取Stream流的方式

java8新特性Stream流操作详解及实战3

java8新特性Stream流操作详解及实战3