import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
public class TestStream {
//中间操作符
/**
* filter:过滤出想要的元素
*/
@Test
public void filter(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac");
List<String> filter = list.stream().filter(s -> s.contains("a")).collect(Collectors.toList());
System.out.println(filter);
}
/**
* distinct:去除集合中相同的元素
*/
@Test
public void distinct(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
List<String> distincted = list.stream().distinct().collect(Collectors.toList());
System.out.println(distincted);
List<User> users = new ArrayList<>();
users.add(new User(1, "zs"));
users.add(new User(1, "zs"));
users.add(new User(2, "yijian"));
List<User> userList = users.stream().distinct().collect(Collectors.toList());
System.out.println(userList);
}
/**
* limit:获取流中的前几个元素
*/
@Test
public void limit(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
List<String> limit = list.stream().limit(3).collect(Collectors.toList());
System.out.println(limit);
}
/**
* skip:获取流中的后几个元素
*/
@Test
public void skip(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
List<String> sikp = list.stream().skip(3).collect(Collectors.toList());
System.out.println(sikp);
}
/**
* map:对流中的元素做统一的处理
*/
@Test
public void map(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
List<String> map = list.stream().map(s -> "map"+s).collect(Collectors.toList());
System.out.println(map);
List<Integer> integerList = Arrays.asList(1,2,3,4,5,6,1);
List<Integer> integers = integerList.stream().map(integer -> integer + 1).collect(Collectors.toList());
System.out.println(integers);
}
/**
* sort:对集合中的元素进行排序
*/
@Test
public void sort(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
List<String> collect = list.stream().sorted().collect(Collectors.toList());
System.out.println(collect);
List<Integer> list1 = Arrays.asList(30,1,-1,3,7);
List<Integer> collect1 = list1.stream().sorted((o1, o2) -> o2-o1).collect(Collectors.toList());
System.out.println(collect1);
}
// 终止操作符
/**
* anyMatch: 判断集合中是否有一个元素满足条件
*/
@Test
public void anyMatch(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
boolean match = list.stream().anyMatch(s -> s.contains("yijian"));
System.out.println(match);
}
/**
* allMatch: 判断集合中是否所有元素都满足条件
*/
@Test
public void allMatch(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
boolean match = list.stream().allMatch(s -> s.contains("yijian"));
System.out.println(match);
}
/**
* noneMatch: 判断集合中是否所有元素都不满足条件
*/
@Test
public void noneMatch(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
boolean match = list.stream().noneMatch(s -> s.contains("yijian"));
System.out.println(match);
}
/**
* findAny: 从集合中随机返回一个元素
*/
@Test
public void findAny(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
// 因为Stream 是串行的,默认返回第一个元素,提高效率
// 可以改为parallelStream 让他并行执行
Optional<String> any = list.parallelStream().findAny();
if (any.isPresent()){
System.out.println(any.get());
}
}
/**
* findFirst: 从集合中随机返回第一个元素
*/
@Test
public void findFirst(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
// 因为Stream 是串行的,默认返回第一个元素,提高效率
// 可以改为parallelStream 让他并行执行
Optional<String> any = list.parallelStream().findFirst();
if (any.isPresent()){
System.out.println(any.get());
}
}
/**
* collect:将流转换为其他形式:list、set、map
*/
@Test
public void collect(){
List<String> list = Arrays.asList("qw", "yijian", "ad", "efg","ac","yijian");
Set<String> collect = list.stream().collect(Collectors.toSet());
System.out.println(collect);
// Collectors.toMap(key -> key, value -> value, (oldKey, newKey) -> newKey)
Map<String, String> collect1 = list.stream().collect(Collectors.toMap(key -> key, value -> value, (oldKey, newKey) -> newKey));
System.out.println(collect1);
}
/**
* reduce:将流中的元素结合起来
*/
@Test
public void reduce(){
List<Integer>list = Arrays.asList(1,2,3,5,6,6,2,1);
// reduce((初始值,每一项的值))
Optional<Integer> optional = list.stream().reduce((initialValue, itemValue) -> {
return initialValue + itemValue;
});
if (optional.isPresent()){
System.out.println(optional.get());
}
// reduce(初始值,(初始值,每一项的值))
Integer integer = list.stream().reduce(1, (initialValue, itemValue) -> {
return initialValue + itemValue;
});
System.out.println(integer);
}
/**
* count:获取集合中元素数量
*/
@Test
public void count(){
List<Integer>list = Arrays.asList(1,2,3,5,6,6,2,1);
Optional<Integer> max = list.stream().max((o1, o2) -> {
return o1 - o2;
});
System.out.println(max);
System.out.println("集合中元素的个数:"+list.stream().count());
}
}
Java8 Stream 常用操作Api
最新推荐文章于 2023-04-09 19:10:18 发布