mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
add method
This commit is contained in:
parent
96df45120d
commit
fbf52763b7
@ -26,6 +26,7 @@
|
||||
* 【core 】 TreeUtil增加walk方法(pr#1932@Gitee)
|
||||
* 【crypto 】 SmUtil增加sm3WithSalt(pr#454@Gitee)
|
||||
* 【http 】 增加HttpInterceptor(issue#I4H1ZV@Gitee)
|
||||
* 【core 】 Opt增加flattedMap(issue#I4H1ZV@Gitee)
|
||||
|
||||
### 🐞Bug修复
|
||||
* 【core 】 修复UrlBuilder.addPath歧义问题(issue#1912@Github)
|
||||
|
@ -50,20 +50,6 @@ public class Opt<T> {
|
||||
*/
|
||||
private static final Opt<?> EMPTY = new Opt<>(null);
|
||||
|
||||
/**
|
||||
* 包裹里实际的元素
|
||||
*/
|
||||
private final T value;
|
||||
|
||||
/**
|
||||
* {@code Opt}的构造函数
|
||||
*
|
||||
* @param value 包裹里的元素
|
||||
*/
|
||||
private Opt(T value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回一个空的{@code Opt}
|
||||
*
|
||||
@ -111,6 +97,20 @@ public class Opt<T> {
|
||||
return StrUtil.isBlankIfStr(value) ? empty() : new Opt<>(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 包裹里实际的元素
|
||||
*/
|
||||
private final T value;
|
||||
|
||||
/**
|
||||
* {@code Opt}的构造函数
|
||||
*
|
||||
* @param value 包裹里的元素
|
||||
*/
|
||||
private Opt(T value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回包裹里的元素,取不到则为{@code null},注意!!!此处和{@link java.util.Optional#get()}不同的一点是本方法并不会抛出{@code NoSuchElementException}
|
||||
* 如果元素为空,则返回{@code null},如果需要一个绝对不能为{@code null}的值,则使用{@link #orElseThrow()}
|
||||
@ -126,16 +126,6 @@ public class Opt<T> {
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 以非静态方式获取一个新的 {@code Opt}
|
||||
*
|
||||
* @param value 值
|
||||
* @return 新的 {@code Opt}
|
||||
*/
|
||||
public Opt<T> set(T value) {
|
||||
return Opt.ofNullable(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断包裹里元素的值是否存在,存在为 {@code true},否则为{@code false}
|
||||
*
|
||||
@ -263,15 +253,15 @@ public class Opt<T> {
|
||||
* @return 如果包裹里的值存在,就执行传入的操作({@link Function#apply})并返回该操作返回值
|
||||
* 如果不存在,返回一个空的{@code Opt}
|
||||
* @throws NullPointerException 如果给定的操作为 {@code null}或者给定的操作执行结果为 {@code null},抛出 {@code NPE}
|
||||
* @see Optional#flatMap(Function)
|
||||
* @since 5.7.16
|
||||
*/
|
||||
public <U> Opt<U> flattedMap(Function<? super T, ? extends Optional<? extends U>> mapper) {
|
||||
Objects.requireNonNull(mapper);
|
||||
if (isEmpty()) {
|
||||
return empty();
|
||||
} else {
|
||||
@SuppressWarnings("unchecked")
|
||||
Optional<U> r = (Optional<U>) mapper.apply(value);
|
||||
return Objects.requireNonNull(ofNullable(r.orElse(null)));
|
||||
return ofNullable(mapper.apply(value).orElse(null));
|
||||
}
|
||||
}
|
||||
|
||||
@ -428,6 +418,15 @@ public class Opt<T> {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换为 {@link Optional}对象
|
||||
* @return {@link Optional}对象
|
||||
* @since 5.7.16
|
||||
*/
|
||||
public Optional<T> toOptional(){
|
||||
return Optional.ofNullable(this.value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断传入参数是否与 {@code Opt}相等
|
||||
* 在以下情况下返回true
|
||||
|
@ -11,6 +11,7 @@ import org.junit.Test;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* {@link Opt}的单元测试
|
||||
@ -135,15 +136,10 @@ public class OptTest {
|
||||
// 以前,不兼容
|
||||
// Opt.ofNullable(userList).map(List::stream).flatMap(Stream::findFirst);
|
||||
// 现在,兼容
|
||||
User user = Opt.ofNullable(userList).map(List::stream).flattedMap(Stream::findFirst).orElseGet(User.builder()::build);
|
||||
System.out.println(user);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setTest() {
|
||||
// 我一直在想,既然有get,为什么不能有set呢?
|
||||
Opt.ofNullable(User.builder().username("ruben").build()).peek(System.out::println)
|
||||
.set(User.builder().username("hutool").build()).peek(System.out::println);
|
||||
User user = Opt.ofNullable(userList).map(List::stream)
|
||||
.flattedMap(Stream::findFirst).orElseGet(User.builder()::build);
|
||||
Assert.assertNull(user.getUsername());
|
||||
Assert.assertNull(user.getNickname());
|
||||
}
|
||||
|
||||
@Data
|
||||
|
Loading…
x
Reference in New Issue
Block a user