JAVA Stream API

JAVA Stream API

Java Stream API 是JDK 1.8提供的对集合(list set)处理的接口,分为parallelStream(并行流) 和 Stream(c串行流)。

下图为Steam中定义的方法:

image-20240714191209848

以下是常用的链式API:

filter

过滤符合条件的元素。

//筛选大于3的元素
public static void main(String[] args) {
    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
    list.stream().filter(i->i>3).forEach(System.out::println);
}

map

用于转换元素,接受一个Function作为参数。

    public static void main(String[] args) {
        List<Person> list = Arrays.asList(new Person("Agge", 20), new Person("Jonas", 25));
        list.stream().map(Person::getAge).forEach(System.out::println);
    }

forEach

用于执行副作用,它接受一个Consumer作为参数。


public static void main(String[] args) {
    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
    list.stream().forEach(System.out::println);
}

collect

用于收集Stream中的元素,返回一个结果。

//根据某个属性去重集合
public static void main(String[] args) {
    List<Person> list = Arrays.asList(new Person("Agge", 25), new Person("Jonas", 25));
          list.stream().collect(Collectors.collectingAndThen(
            Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getAge))),
            ArrayList::new)).forEach(System.out::println);
}

reduce

用于将Stream中的元素组合起来,返回一个单一的值。


public static void main(String[] args) {
    List<Person> list = Arrays.asList(new Person("Agge", 25), new Person("Jonas", 25));
    list.stream().map(Person::getAge).reduce(Integer::sum).ifPresent(System.out::println);
}

mapToDouble、mapToInt、mapToLong

这些方法允许你将Stream中的元素转换为数值类型,并返回对应的DoubleStream、IntStream或LongStream。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
IntStream numberStream = numbers.stream()
    .mapToInt(Integer::intValue);

sorted

排序

public static void main(String[] args) {
    List<Person> list = Arrays.asList(new Person("Agge", 50), new Person("Jonas", 1),new Person("Jonas", 100));
    list.stream().sorted(Comparator.comparing(Person::getAge)).collect(Collectors.toList()).forEach(System.out::println);
}

anyMatch\ allMatch\ noneMatch

测试是否有任意元素\所有元素\没有元素匹配表达式,返回布尔值

public static void main(String[] args) {
    List<Person> list = Arrays.asList(new Person("Agge", 50), new Person("Jonas", 1),new Person("Jonas", 100));
    boolean b = list.stream().map(Person::getAge).anyMatch(i -> i > 50);
}

max/min

public static void main(String[] args) {
    List<Person> list = Arrays.asList(new Person("Agge", 50), new Person("Jonas", 1),new Person("Jonas", 100));
    list.stream().max(Comparator.comparing(Person::getAge)).ifPresent(System.out::println);
}

TODO Comparator 和 Collectors后续补充

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值