package com.xbb.java.stream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
/**
* 筛选和过滤
* 1 : filter --接收Lambda.从流中排除某些元素.
* 2 : limit --截断流,使其元素不超过给定数量.
* 3 : skip(n)--跳过元素,返回一个扔掉了前n个元素的流.若流中元素不足n个.则返回一个空流.与limit(n)互补.
* 4 : distinct-筛选.通过流所生成元素的hashCode()和equals()去除重复元素.
*/
public class StreamDemo_Step_2 {
public static void main(String[] args) {
step2_filter();
step2_limit();
step2_skip();
step2_mapping_map();
step2_flatmap();
step2_sort();
}
static List<Person> list = Arrays.asList(
new Person(1,"小败笔-1",32),
new Person(2,"小败笔-2",52),
new Person(3,"小败笔-3",72),
new Person(4,"小败笔-4",12),
new Person(5,"小败笔-5",52),
new Person(5,"小败笔-5",52)
);
/**
* 2 : 中间操作 : 过滤操作
*/
public static void step2_filter(){
Stream<Person> stream = list.stream();
// 过滤操作 , 过滤年龄小于30岁的人
stream.filter((person -> person.getAge()>30))
.forEach(System.out::println);
}
/**
* 2 : 中间操作 : 截断操作
*/
public static void step2_limit(){
System.out.println("--------");
Stream<Person> stream = list.stream();
// 截断操作
stream.limit(2).forEach(System.out::println);
}
/**
* 2 : 中间操作 : 跳过操作
*/
public static void step2_skip(){
System.out.println("--------");
Stream<Person> stream = list.stream();
stream.skip(2).forEach(System.out::println);
}
/**
* 2 : 中间操作 : 去重操作
* 去重操作需要重写equals和hashCode操作
*/
public static void step2_distinct(){
System.out.println("--------");
Stream<Person> stream = list.stream();
stream.distinct().forEach(System.out::println);
}
/**
* 2 : 中间操作 : 映射
* map -- 接收Lambda,将元素转化成其他形式或提取信息.接收一个函数作为参数.该函数会被应用到每个元素上.并将其他映射成为一个新的元素.
* flatMap--接收一个函数作为参数.将流中的每个值都换成另一个流.然后把所有流都连接成一个流.
*/
public static void step2_mapping_map(){
System.out.println("--------");
// 转换大小写用法
List<String> li = Arrays.asList("aaa","bbb","ccc","ddd","eee");
Stream stream = li.stream().map((str)->str.toUpperCase());
stream.forEach(System.out::println);
System.out.println("--------");
// 提取名称用法
Stream<Person> stream1 = list.stream();
Stream<String> stream2 = stream1.map(Person::getName);//.forEach(System.out::println);
stream2.forEach(System.out::println);
}
/**
* 2 : 中间操作 : 映射 flatmap
*/
public static void step2_flatmap(){
System.out.println("--------");
// 把集合中的数据以单个字母的形式打印到Console
List<String> li = Arrays.asList("aaa","bbb","ccc","ddd","eee");
// 第一种做法 : 比较麻烦
Stream<String> stream = li.stream();
Stream<Stream<Character>> stream1 = stream.map(StreamDemo_Step_2::step2_flatmap_help);
stream1.forEach((sm) -> {
sm.forEach(System.out::println);
});
System.out.println("--------");
// 第二种做法 : flatmap : 推荐,把多个相同泛型的子流合并为一个流
Stream<Character> charStream = li.stream().flatMap(StreamDemo_Step_2::step2_flatmap_help);
charStream.forEach(System.out::println);
}
/**
* 上面方法的辅助方法
* @param str
* @return
*/
public static Stream<Character> step2_flatmap_help(String str){
Stream<Character> stream = null;
try{
List<Character> list = new ArrayList<>();
for (Character ch : str.toCharArray()){
list.add(ch);
}
stream = list.stream();
}catch (Exception e){
e.printStackTrace();
}
return stream;
}
/**
* 2 : 中间操作 : 排序
*
* 自然排序 : 按comparable排序称为自然排序 ; sorted()
* 定制排序 : 按sorted(Comparator)
*
*
*/
public static void step2_sort(){
// 自然排序
List<String> li = Arrays.asList("ccc","ddd","bbb","aaa","eee");
li.stream()
.sorted()
.forEach(System.out::println);
// 定制排序
Stream<Person> stream = list.stream()
.sorted((p1,p2)->{
if(p1.getAge()==p2.getAge()){
return p1.getName().compareTo(p2.getName());
}else{
return Integer.compare(p1.getAge(),p2.getAge());
}
});
stream.forEach(System.out::println);
}
}
Java8 Stream Step2 中间操作
猜你喜欢
转载自blog.csdn.net/jinjianghai/article/details/92967073
今日推荐
周排行