首先定义一个实体类,下面demo中用到:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class People {
private int age;
private String name;
}
- map方法:这里的map所指的并不是Java中的Map集合,而是Stream中的一个方法,它的作用是接收一个函数,将这个函数应用到流中的每个元素上,并返回一个新的元素。下面举例:将成年人的名字组成集合
private static void map() {
List<People> list = Lists.newArrayList(new People(19, "张三"), new People(23, "李四"), new People(15, "王二"),
new People(30, "麻子"));
List<String> names =
list.stream().filter(people -> people.getAge() >= 18).map(People::getName).collect(Collectors.toList());
//输出->成年人有:[张三, 李四, 麻子]
log.debug("成年人有:{}",names.toString());
}
- flatMap方法:将流中的每个值转换成另外一流,然后将所有的流连接起来成为一个流。
private static void flatMap() {
List<People> list = Lists.newArrayList(new People(19, "张三"), new People(23, "李四"), new People(15, "王二"),
new People(30, "麻子"),new People(19, "张三"), new People(23, "李四"), new People(15, "王二"),
new People(30, "麻子"));
//此处需要注意:distinct去重方法需在flatMap方法后才会起作用
List<String> names =
list.stream().filter(people -> people.getAge() >= 18).map(people ->people.getName().split("")).flatMap(Arrays::stream).distinct().collect(Collectors.toList());
//输出->去重后的字符:[张, 三, 李, 四, 麻, 子]
log.debug("去重后的字符:{}",names.toString());
}