mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
add peek
This commit is contained in:
parent
92f0d13ef7
commit
3fca9e3afd
@ -277,6 +277,7 @@ public class Opt<T> {
|
|||||||
*/
|
*/
|
||||||
@SafeVarargs
|
@SafeVarargs
|
||||||
public final Opt<T> peeks(Consumer<T>... actions) throws NullPointerException {
|
public final Opt<T> peeks(Consumer<T>... actions) throws NullPointerException {
|
||||||
|
// 第三个参数 (opts, opt) -> null其实并不会执行到该函数式接口所以直接返回了个null
|
||||||
return Stream.of(actions).reduce(this, Opt<T>::peek, (opts, opt) -> null);
|
return Stream.of(actions).reduce(this, Opt<T>::peek, (opts, opt) -> null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -9,8 +9,6 @@ import org.junit.Ignore;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
import java.util.function.Consumer;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link Opt}的单元测试
|
* {@link Opt}的单元测试
|
||||||
@ -70,7 +68,7 @@ public class OptTest {
|
|||||||
User user = new User();
|
User user = new User();
|
||||||
// 相当于上面peek的动态参数调用,更加灵活,你可以像操作数组一样去动态设置中间的步骤,也可以使用这种方式去编写你的代码
|
// 相当于上面peek的动态参数调用,更加灵活,你可以像操作数组一样去动态设置中间的步骤,也可以使用这种方式去编写你的代码
|
||||||
// 可以一行搞定
|
// 可以一行搞定
|
||||||
Opt.ofNullable("hutool").peeks(user::setUsername, user::setNickname, System.out::println);
|
Opt.ofNullable("hutool").peeks(user::setUsername, user::setNickname);
|
||||||
// 也可以在适当的地方换行使得代码的可读性提高
|
// 也可以在适当的地方换行使得代码的可读性提高
|
||||||
Opt.of(user).peeks(
|
Opt.of(user).peeks(
|
||||||
u -> Assert.assertEquals("hutool", u.getNickname()),
|
u -> Assert.assertEquals("hutool", u.getNickname()),
|
||||||
@ -81,15 +79,11 @@ public class OptTest {
|
|||||||
|
|
||||||
// 注意,传入的lambda中,对包裹内的元素执行赋值操作并不会影响到原来的元素,这是java语言的特性。。。
|
// 注意,传入的lambda中,对包裹内的元素执行赋值操作并不会影响到原来的元素,这是java语言的特性。。。
|
||||||
// 这也是为什么我们需要getter和setter而不直接给bean中的属性赋值中的其中一个原因
|
// 这也是为什么我们需要getter和setter而不直接给bean中的属性赋值中的其中一个原因
|
||||||
String name = Opt.ofNullable("hutool").peeks(username -> username = "123", username -> username = "456", n -> Assert.assertEquals("hutool", n)).get();
|
String name = Opt.ofNullable("hutool").peeks(
|
||||||
|
username -> username = "123", username -> username = "456",
|
||||||
|
n -> Assert.assertEquals("hutool", n)).get();
|
||||||
Assert.assertEquals("hutool", name);
|
Assert.assertEquals("hutool", name);
|
||||||
|
|
||||||
// 在控制台打印n次hutool
|
|
||||||
int n = 10;
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
Consumer<String>[] actions = Stream.<Consumer<String>>generate(() -> System.out::println).limit(n).toArray(Consumer[]::new);
|
|
||||||
Opt.ofNullable("hutool").peeks(actions);
|
|
||||||
|
|
||||||
// 当然,以下情况不会抛出NPE,但也没什么意义
|
// 当然,以下情况不会抛出NPE,但也没什么意义
|
||||||
Opt.ofNullable("hutool").peeks().peeks().peeks();
|
Opt.ofNullable("hutool").peeks().peeks().peeks();
|
||||||
Opt.ofNullable(null).peeks(i -> {
|
Opt.ofNullable(null).peeks(i -> {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user