java8新特性stream流示例
程序员文章站
2022-04-28 21:26:52
...
一、简介
java.util.stream表示能应用在一组元素上一次执行的操作序列。stream操作分为中间操作和最终操作,最终操作返回一特定类型的计算结果,而中间操作返回stream本身,这样就可以将多个操作串起来。stream操作需要指定一个数据源,比如java.util.collection的子类、list或者set,map类型不支持。stream可以串行stream()执行或者并行parallelStream()执行。
二、Stream
三、示例
1、foreach循环
@Test
public void Foreach(){
//你不鸟我,我也不鸟你
List<String> list = Arrays.asList("you","don't","bird","me",",",
"i","don't","bird","you");
//方式一:jdk1.8之前的循环遍历方式
for(String item:list){
System.out.println(item);
}
//方式二:使用stream流
// void forEach(Consumer<? super T> action)
list.stream().forEach(item -> System.out.println(item));
//方式三:使用stream流+lambda表达式
list.stream().forEach(System.out::println);
}
2、filter过滤
public class User{
private long id;
private String name;
private Integer age;
public User(){}
public User(long id, String name, Integer age){
this.id = id;
this.name = name;
this.age = age;
}
public Integer getAge(){
return this.age;
}
}
@Test
public void filter(){
List<User> users = Arrays.asList(
new User(1, "wanwei", 23),
new User(2, "zhangsan", 25),
new User(3, "lisi", 29)
);
users.stream().filter(user -> user.getAge()>24).forEach(user -> System.out.println(user.name));
}
3、map映射
@Test
public void map(){
List<String> list = Arrays.asList("djfh", "sdf", "sdfg");
list.stream().map(item -> item.toUpperCase()).forEach(System.out::println);
}
4、flatmap
@Test
public void flatmap(){
List<Integer> a = Arrays.asList(1,2,3);
List<Integer> b = Arrays.asList(4,5,6);
List<List<Integer>> collect = Stream.of(a,b).collect(Collectors.toList());
System.out.println(collect);
//将多个集合中的元素合并为一个集合
List<Integer> mergelist = Stream.of(a,b).flatMap(list -> list.stream()).collect(Collectors.toList());
System.out.println(mergelist);
//通过Builder方式来构建
Stream<Object> stream = Stream.builder().add("hello").add("hi").add("HI").build();
stream.forEach(System.out::println);
}
5、sorted排序
@Test
public void sorted(){
List<String> list = Arrays.asList("c","b","e","a");
list.stream().sorted((s1,s2) -> s1.compareTo(s2)).forEach(System.out::println);
}
6、distinct去重
@Test
public void distinct(){
Stream<String> stream = Stream.of("hello","hello","hi","hi","i");
stream.distinct().forEach(System.out::println);
}
7、count总数量
@Test
public void count(){
Stream<String> stream = Stream.of("known","is","known","nok","is","nok");
long count = stream.count();
System.out.println(count);
}
8、skip、limit
@Test
public void skip(){
List<String> list = Arrays.asList("a", "b", "c", "d", "e");
// Stream<T> skip(long n)
list.stream().skip(2).forEach(System.out::println); // c、d、e
}
@Test
public void limit(){
List<String> list = Arrays.asList("a", "b", "c", "d", "e");
list.stream().skip(2).limit(2).forEach(System.out::println); // c、d
}
9、concat
@Test
public void concat(){
List<String> list = Arrays.asList("a", "b");
List<String> list2 = Arrays.asList("c", "d");
Stream<String> concatStream = Stream.concat(list.stream(), list2.stream());
concatStream.forEach(System.out::println);
}
10、anyMatch、allMatch
@Test
public void match(){
// 你给我站住
List<String> list = Arrays.asList("you", "give", "me", "stop");
// boolean anyMatch(Predicate<? super T> predicate);
// parallelStream可以并行计算,速度比stream更快
boolean result = list.parallelStream().anyMatch(item -> item.equals("me"));
System.out.println(result);
}
11、reduce归纳
@Test
public void reduce(){
Stream<String> stream = Stream.of("you", "give", "me", "stop");
// Optional<T> reduce(BinaryOperator<T> accumulator);
Optional<String> optional = stream.reduce((before, after) -> before + "," + after);
optional.ifPresent(System.out::println); // you,give,me,stop
}
public static void main(String[] args) {
List<BigDecimal> list = Arrays.asList(
new BigDecimal("11.11"),
new BigDecimal("22.22"),
new BigDecimal("33.33")
);
// 66.66
BigDecimal sum = list.stream().reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(sum);
}
12、findFirst、findAny
@Test
public void findFirst(){
Stream<String> stream = Stream.of("you", "give", "me", "stop");
String value = stream.findFirst().get();
System.out.println(value);
}
@Test
public void findAny(){
Stream<String> stream = Stream.of("you", "give", "me", "stop");
String value2 = stream.findAny().get();
System.out.println(value2);
}
推荐阅读
-
乐字节-Java8新特性之Base64和重复注解与类型注解
-
使用html5新特性轻松监听任何App自带返回键的示例
-
Java8中新特性Optional、接口中默认方法和静态方法详解
-
Java8新特性之JavaFX 8_动力节点Java学院整理
-
Java8新特性之Base64详解_动力节点Java学院整理
-
Java8新特性之泛型的目标类型推断_动力节点Java学院整理
-
Java8新特性之StampedLock_动力节点Java学院整理
-
Java8新特性之lambda的作用_动力节点Java学院整理
-
Java8新特性之类型注解_动力节点Java学院整理
-
Java8新特性之再见Permgen_动力节点Java学院整理