首页 > 编程语言 >java中的lambda表达式

java中的lambda表达式

时间:2022-10-31 07:36:40浏览次数:36  
标签:mapper java Stream stream list 接口 表达式 lambda

简介

java的lambda表达式是一种简单的匿名函数,这个匿名函数中都是干货,参数列表,lambda表达式的符号->和逻辑代码

lambda的表达式的形式如下

//当只有一个参数时,可以省略小括号
//当代码逻辑只有一行时,可以省大括号
(parm1,parm2,小括号内为参数列表) -> {大括号内为逻辑代码}

lambda的形式

1,无参数无返回值

new Thread(() -> System.out.println("haha")).start();

2,无参有返回值

3,有参无返回值

List<String> list = Arrays.asList("a", "b", "c", "d");
//x是参数,当只有一个参数时,可以省略小括号,当只有一行逻辑代码时,也可省略大括号
//精简后的代码 list.stream().forEach(x-> System.out.println(x));
list.stream().forEach((x)->{ System.out.println(x);});

4,有参有返回值

List<String> list = Arrays.asList("a", "b", "c", "d");

Stream<String> stream = list.stream().sorted((x, y) -> x.compareTo(y));

5,只有一个参数,省略小括号

List<String> list = Arrays.asList("a", "b", "c", "d");

list.stream().forEach(x-> System.out.println(x) );

6,只有一行代码逻辑,省略大括号

new Thread(() -> System.out.println("haha")).start();

获取Stream对象的三种方式

1,通过集合获取

List<String> list = Arrays.asList("a", "b", "c", "d");
Stream<String> stream = list.stream();

2,从数组中获取

String[] strs = {"a", "b", "c", "d"};
Stream<String> stream = Arrays.stream(strs);

3,Stream中的静态方法of获取流

Stream<String> stream1 = Stream.of("aa", "bb", "cc");

java中的方法引用

方法的引用就是这个方法已经实现了函数式接口中的方法即此方法的格式和函数式接口中方法的格式相同,当我们需要写lambda表达式的时候,直接引用此方法就可以了。

因此称为方法的引用

常用四大函数式接口

写在前面

我们平时遇到的接口基本都是这四个或这四个的子类。

我们也可以声明自己的函数式接口,但是意义不大,除非我们需要对某个lambda表达式进行更细粒度的控制。

Function(功能)

接口中的方法R apply(T var1);
用于有参数有返回值的场景

Consumer(消耗者)

接口中的方法void accept(T var1);
用于有参数无返回值的场景

Supplier(供应者)

接口中的方法T get();
用于无参数有返回值的场景

Predicate(使取决于)

接口中的方法boolean test(T var1);
用于有参数,返回判断结果的场景

Stream对象的方法

filter

Stream filter(Predicate<? super T> predicate);

map

Stream map(Function<? super T, ? extends R> mapper);

mapToInt

IntStream mapToInt(ToIntFunction<? super T> mapper);

mapToLong

LongStream mapToLong(ToLongFunction<? super T> mapper);

mapToDouble

DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper);

flatMap

Stream flatMap(Function<? super T, ? extends Stream<? extends R>> mapper);

flatMapToInt

IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper);

flatMapToLong

LongStream flatMapToLong(Function<? super T, ? extends LongStream> mapper);

flatMapToDouble

DoubleStream flatMapToDouble(Function<? super T, ? extends DoubleStream> mapper);

distinct

Stream distinct();

sorted

Stream sorted();

sorted

Stream sorted(Comparator<? super T> comparator);

peek

Stream peek(Consumer<? super T> action);

limit

Stream limit(long maxSize);

skip

Stream skip(long n);

forEach

void forEach(Consumer<? super T> action);

forEachOrdered

void forEachOrdered(Consumer<? super T> action);

toArray

Object[] toArray();

toArray

A[] toArray(IntFunction<A[]> generator);

reduce

T reduce(T identity, BinaryOperator accumulator);

reduce

Optional reduce(BinaryOperator accumulator);

reduce

U reduce(U identity,
BiFunction<U, ? super T, U> accumulator,
BinaryOperator combiner);

collect

R collect(Supplier supplier,
BiConsumer<R, ? super T> accumulator,
BiConsumer<R, R> combiner);

collect

<R, A> R collect(Collector<? super T, A, R> collector);

min

Optional min(Comparator<? super T> comparator);

max

Optional max(Comparator<? super T> comparator);

count

long count();

anyMatch

boolean anyMatch(Predicate<? super T> predicate);

allMatch

boolean allMatch(Predicate<? super T> predicate);

noneMatch

boolean noneMatch(Predicate<? super T> predicate);

findFirst

Optional findFirst();

findAny

Optional findAny();

builder

public static Builder builder() {
return new Streams.StreamBuilderImpl<>();
}

empty

public static Stream empty() {
return StreamSupport.stream(Spliterators.emptySpliterator(), false);
}

of

public static Stream of(T t) {
return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
}

of

@SafeVarargs
@SuppressWarnings("varargs") // Creating a stream from an array is safe
public static Stream of(T... values) {
return Arrays.stream(values);
}

concat

public static Stream concat(Stream<? extends T> a, Stream<? extends T> b) {
Objects.requireNonNull(a);
Objects.requireNonNull(b);

@SuppressWarnings("unchecked")
Spliterator<T> split = new Streams.ConcatSpliterator.OfRef<>(
        (Spliterator<T>) a.spliterator(), (Spliterator<T>) b.spliterator());
Stream<T> stream = StreamSupport.stream(split, a.isParallel() || b.isParallel());
return stream.onClose(Streams.composedClose(a, b));

}

Collectors接口

标签:mapper,java,Stream,stream,list,接口,表达式,lambda
From: https://www.cnblogs.com/sinosecurity/p/16842951.html

相关文章

  • Java多线程(6):锁与AQS(下)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 之前说过,AQS(抽象队列同步器)是Java锁机制的底层实现。既然它这么优秀,是骡子是马,就拉出来溜溜吧。首先用重入锁来实现简......
  • javax.validation 请求参数校验小问题: @Min 不校验是否为空
    想用@Min来校验是否为空, 结果发现不行, 看来是必须用到@NotNull 注解了.如下. 我的代码是:@Min(value=0,message=MsgCdConstant.AMOUNT_MUST_BE_POSITIVE)h......
  • 什么是JAVA内存模型
    前言在并发编程中,当多个线程同时访问同一个共享的可变变量时,会产生不确定的结果,所以要编写线程安全的代码,其本质上是对这些可变的共享变量的访问操作进行管理。导致这种不......
  • JavaWeb
    客户端给服务器发数据叫请求服务器给客户端回传数据叫响应Web资源的分类:静态资源:htmlcssjstxtmp4视频jpg图片动态资源:jsp页面Serviet程序常用的Web服务器:Tomc......
  • java锁之初相见
    废话不多说,先上锁的分类图1、乐观锁&悲观锁悲观锁悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,把别的线程阻塞住,最终确......
  • Java锁
    Java锁乐观锁:乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此......
  • Java面试题(一)
    1、什么是自动装配,有哪些方式spring会自动中上下文中寻找并给bean装配与其相关的属性自动装配方式1、byName:把与bean的属性具有相同名字的其他b......
  • ES6与JavaScript学习总结
    菜鸟的ES6与JavaScript学习总结说明一、概述(1)什么是javascript?(2)什么是ES6(3)ES6和JavaScript的关系(4)ES6的浏览器兼容情况二、语法(1)变量(2)箭头函数(3)解构赋值(4)数组操作(5)字符串......
  • java 获取远程PDF文件并批量下载
    packagepdf;importcn.hutool.core.date.DateUtil;importcn.hutool.core.io.IoUtil;importcn.hutool.core.util.CharsetUtil;importlombok.extern.slf4j.Slf4j;......
  • JavaWeb之连接数据库操作
    亲爱的学弟学妹,我知道你们是因为什么搜到这篇博客的,我也很懂你们现在的心情,此时此刻举目无亲面对着建民老师的高要求,你们或许十分无助,所以我写下这篇博客,因为我淋过雨所以......