mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
Opt get change to getOrNull
This commit is contained in:
parent
780029c032
commit
9ee9fb8866
@ -52,8 +52,8 @@ public class WeakCache<K, V> extends TimedCache<K, V>{
|
||||
final WeakConcurrentMap<Mutable<K>, CacheObj<K, V>> map = (WeakConcurrentMap<Mutable<K>, CacheObj<K, V>>) this.cacheMap;
|
||||
// WeakKey回收之后,key对应的值已经是null了,因此此处的key也为null
|
||||
map.setPurgeListener((key, value)-> listener.onRemove(
|
||||
Opt.ofNullable(key).map(Ref::get).map(Mutable::get).get(),
|
||||
Opt.ofNullable(value).map(Ref::get).map(CacheObj::getValue).get()));
|
||||
Opt.ofNullable(key).map(Ref::get).map(Mutable::get).getOrNull(),
|
||||
Opt.ofNullable(value).map(Ref::get).map(CacheObj::getValue).getOrNull()));
|
||||
|
||||
return this;
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ public class CollStreamUtil {
|
||||
if (CollUtil.isEmpty(collection)) {
|
||||
return MapUtil.zero();
|
||||
}
|
||||
return toMap(collection, (v) -> Opt.ofNullable(v).map(key).get(), Function.identity(), isParallel);
|
||||
return toMap(collection, (v) -> Opt.ofNullable(v).map(key).getOrNull(), Function.identity(), isParallel);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -127,7 +127,7 @@ public class CompositeConverter extends RegisterConverter {
|
||||
|
||||
// issue#I7WJHH,Opt和Optional处理
|
||||
if (value instanceof Opt) {
|
||||
value = ((Opt<T>) value).get();
|
||||
value = ((Opt<T>) value).getOrNull();
|
||||
if (ObjUtil.isNull(value)) {
|
||||
return defaultValue;
|
||||
}
|
||||
|
@ -151,16 +151,15 @@ public class Opt<T> {
|
||||
|
||||
/**
|
||||
* 返回包裹里的元素,取不到则为{@code null},注意!!!此处和{@link java.util.Optional#get()}不同的一点是本方法并不会抛出{@code NoSuchElementException}
|
||||
* 如果元素为空,则返回{@code null},如果需要一个绝对不能为{@code null}的值,则使用{@link #orElseThrow()}
|
||||
*
|
||||
* <p>
|
||||
* 如果需要一个绝对不能为 {@code null}的值,则使用{@link #orElseThrow()}
|
||||
* 如果元素为空,则返回{@code null},如果需要一个绝对不能为 {@code null}的值,则使用{@link #orElseThrow()}
|
||||
* 做此处修改的原因是,有时候我们确实需要返回一个null给前端,并且这样的时候并不少见
|
||||
* 而使用 {@code .orElse(null)}需要写整整12个字符,用{@code .get()}就只需要6个啦
|
||||
*
|
||||
* @return 包裹里的元素,有可能为{@code null}
|
||||
*/
|
||||
public T get() {
|
||||
public T getOrNull() {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
@ -362,7 +361,8 @@ public class Opt<T> {
|
||||
*/
|
||||
@SafeVarargs
|
||||
public final Opt<T> ifPresents(final SerConsumer<T>... actions) throws NullPointerException {
|
||||
return ifPresent(Stream.of(actions).reduce(SerConsumer::andThen).orElseGet(() -> o -> {}));
|
||||
return ifPresent(Stream.of(actions).reduce(SerConsumer::andThen).orElseGet(() -> o -> {
|
||||
}));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -279,7 +279,7 @@ public interface ForestMap<K, V> extends Map<K, TreeEntry<K, V>> {
|
||||
default V getNodeValue(final K key) {
|
||||
return Opt.ofNullable(get(key))
|
||||
.map(TreeEntry::getValue)
|
||||
.get();
|
||||
.getOrNull();
|
||||
}
|
||||
|
||||
// ===================== 子节点相关方法 =====================
|
||||
|
@ -60,7 +60,7 @@ public interface Table<R, C, V> extends Iterable<Table.Cell<R, C, V>> {
|
||||
* @return 行是否存在
|
||||
*/
|
||||
default boolean containsRow(final R rowKey) {
|
||||
return Opt.ofNullable(rowMap()).map((map) -> map.containsKey(rowKey)).get();
|
||||
return Opt.ofNullable(rowMap()).map((map) -> map.containsKey(rowKey)).getOrNull();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -70,7 +70,7 @@ public interface Table<R, C, V> extends Iterable<Table.Cell<R, C, V>> {
|
||||
* @return 行映射,返回的键为列键,值为表格的值
|
||||
*/
|
||||
default Map<C, V> getRow(final R rowKey) {
|
||||
return Opt.ofNullable(rowMap()).map((map) -> map.get(rowKey)).get();
|
||||
return Opt.ofNullable(rowMap()).map((map) -> map.get(rowKey)).getOrNull();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -79,7 +79,7 @@ public interface Table<R, C, V> extends Iterable<Table.Cell<R, C, V>> {
|
||||
* @return 行键
|
||||
*/
|
||||
default Set<R> rowKeySet() {
|
||||
return Opt.ofNullable(rowMap()).map(Map::keySet).get();
|
||||
return Opt.ofNullable(rowMap()).map(Map::keySet).getOrNull();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -99,7 +99,7 @@ public interface Table<R, C, V> extends Iterable<Table.Cell<R, C, V>> {
|
||||
* @return 列是否存在
|
||||
*/
|
||||
default boolean containsColumn(final C columnKey) {
|
||||
return Opt.ofNullable(columnMap()).map((map) -> map.containsKey(columnKey)).get();
|
||||
return Opt.ofNullable(columnMap()).map((map) -> map.containsKey(columnKey)).getOrNull();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -109,7 +109,7 @@ public interface Table<R, C, V> extends Iterable<Table.Cell<R, C, V>> {
|
||||
* @return 列映射,返回的键为行键,值为表格的值
|
||||
*/
|
||||
default Map<R, V> getColumn(final C columnKey) {
|
||||
return Opt.ofNullable(columnMap()).map((map) -> map.get(columnKey)).get();
|
||||
return Opt.ofNullable(columnMap()).map((map) -> map.get(columnKey)).getOrNull();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -118,7 +118,7 @@ public interface Table<R, C, V> extends Iterable<Table.Cell<R, C, V>> {
|
||||
* @return 列set
|
||||
*/
|
||||
default Set<C> columnKeySet() {
|
||||
return Opt.ofNullable(columnMap()).map(Map::keySet).get();
|
||||
return Opt.ofNullable(columnMap()).map(Map::keySet).getOrNull();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -157,7 +157,7 @@ public interface Table<R, C, V> extends Iterable<Table.Cell<R, C, V>> {
|
||||
* @return 值
|
||||
*/
|
||||
default boolean containsValue(final V value){
|
||||
final Collection<Map<C, V>> rows = Opt.ofNullable(rowMap()).map(Map::values).get();
|
||||
final Collection<Map<C, V>> rows = Opt.ofNullable(rowMap()).map(Map::values).getOrNull();
|
||||
if(null != rows){
|
||||
for (final Map<C, V> row : rows) {
|
||||
if (row.containsValue(value)) {
|
||||
@ -176,7 +176,7 @@ public interface Table<R, C, V> extends Iterable<Table.Cell<R, C, V>> {
|
||||
* @return 值,如果值不存在,返回{@code null}
|
||||
*/
|
||||
default V get(final R rowKey, final C columnKey) {
|
||||
return Opt.ofNullable(getRow(rowKey)).map((map) -> map.get(columnKey)).get();
|
||||
return Opt.ofNullable(getRow(rowKey)).map((map) -> map.get(columnKey)).getOrNull();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -33,7 +33,7 @@ public class KClassUtil {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private static final Class<? extends Annotation> META_DATA_CLASS =
|
||||
(Class<? extends Annotation>) Opt.ofTry(() -> Class.forName("kotlin.Metadata")).get();
|
||||
(Class<? extends Annotation>) Opt.ofTry(() -> Class.forName("kotlin.Metadata")).getOrNull();
|
||||
|
||||
/**
|
||||
* 是否提供或处于Kotlin环境中
|
||||
|
@ -53,10 +53,10 @@ public class OptTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTest() {
|
||||
public void getOrNullTest() {
|
||||
// 和原版Optional有区别的是,get不会抛出NoSuchElementException
|
||||
// 如果想使用原版Optional中的get这样,获取一个一定不为空的值,则应该使用orElseThrow
|
||||
final Object opt = Opt.ofNullable(null).get();
|
||||
final Object opt = Opt.ofNullable(null).getOrNull();
|
||||
Assertions.assertNull(opt);
|
||||
}
|
||||
|
||||
@ -77,7 +77,7 @@ public class OptTest {
|
||||
Assertions.assertEquals("hutool", user.getUsername());
|
||||
|
||||
// 注意,传入的lambda中,对包裹内的元素执行赋值操作并不会影响到原来的元素
|
||||
final String name = Opt.ofNullable("hutool").ifPresent(username -> username = "123").ifPresent(username -> username = "456").get();
|
||||
final String name = Opt.ofNullable("hutool").ifPresent(username -> username = "123").ifPresent(username -> username = "456").getOrNull();
|
||||
Assertions.assertEquals("hutool", name);
|
||||
}
|
||||
|
||||
@ -99,7 +99,7 @@ public class OptTest {
|
||||
// 这也是为什么我们需要getter和setter而不直接给bean中的属性赋值中的其中一个原因
|
||||
final String name = Opt.ofNullable("hutool").ifPresents(
|
||||
username -> username = "123", username -> username = "456",
|
||||
n -> Assertions.assertEquals("hutool", n)).get();
|
||||
n -> Assertions.assertEquals("hutool", n)).getOrNull();
|
||||
Assertions.assertEquals("hutool", name);
|
||||
|
||||
// 当然,以下情况不会抛出NPE,但也没什么意义
|
||||
@ -119,7 +119,7 @@ public class OptTest {
|
||||
final User user = User.builder().username("hutool").build();
|
||||
final Opt<User> userOpt = Opt.of(user);
|
||||
// 获取昵称,获取不到则获取用户名
|
||||
final String name = userOpt.map(User::getNickname).or(() -> userOpt.map(User::getUsername)).get();
|
||||
final String name = userOpt.map(User::getNickname).or(() -> userOpt.map(User::getUsername)).getOrNull();
|
||||
Assertions.assertEquals("hutool", name);
|
||||
}
|
||||
|
||||
|
@ -84,7 +84,7 @@ abstract class BaseMutableTest<V, M extends Mutable<V>> {
|
||||
@Test
|
||||
void testToOpt() {
|
||||
final Mutable<V> mutableObj = getMutable(getValue1());
|
||||
final V value = mutableObj.toOpt().get();
|
||||
final V value = mutableObj.toOpt().getOrNull();
|
||||
Assertions.assertEquals(getValue1(), value);
|
||||
}
|
||||
|
||||
|
@ -548,19 +548,19 @@ public class EasyStreamTest {
|
||||
final Opt<BigDecimal> bigDecimalAvgFullParam = EasyStream.of(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10)
|
||||
.map(NumberUtil::toBigDecimal)
|
||||
.avg(Function.identity(), 2, RoundingMode.HALF_UP);
|
||||
Assertions.assertEquals(NumberUtil.toBigDecimal(5.96), bigDecimalAvgFullParam.get());
|
||||
Assertions.assertEquals(NumberUtil.toBigDecimal(5.96), bigDecimalAvgFullParam.getOrNull());
|
||||
|
||||
//测试bigDecimal的avg单参
|
||||
final Opt<BigDecimal> bigDecimalAvgOneParam = EasyStream.of(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10)
|
||||
.map(NumberUtil::toBigDecimal)
|
||||
.avg(Function.identity());
|
||||
Assertions.assertEquals(NumberUtil.toBigDecimal(5.96), bigDecimalAvgOneParam.get());
|
||||
Assertions.assertEquals(NumberUtil.toBigDecimal(5.96), bigDecimalAvgOneParam.getOrNull());
|
||||
|
||||
//测试bigDecimal的avg双参
|
||||
final Opt<BigDecimal> bigDecimalAvgTwoParam = EasyStream.of(1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9, 10.10)
|
||||
.map(NumberUtil::toBigDecimal)
|
||||
.avg(Function.identity(), 2);
|
||||
Assertions.assertEquals(NumberUtil.toBigDecimal(5.96), bigDecimalAvgTwoParam.get());
|
||||
Assertions.assertEquals(NumberUtil.toBigDecimal(5.96), bigDecimalAvgTwoParam.getOrNull());
|
||||
|
||||
//测试bigDecimal的avg 空元素
|
||||
final Opt<BigDecimal> emptyBigDecimalAvg = EasyStream.of(bigDecimalEmptyList)
|
||||
@ -585,7 +585,7 @@ public class EasyStreamTest {
|
||||
final BigDecimal sum = EasyStream.of(testList).sum(BigDecimalTest::getCount);
|
||||
Assertions.assertEquals(15, sum.intValue());
|
||||
|
||||
final BigDecimal avg = EasyStream.of(testList).avg(BigDecimalTest::getCount).get();
|
||||
final BigDecimal avg = EasyStream.of(testList).avg(BigDecimalTest::getCount).getOrNull();
|
||||
Assertions.assertEquals(3, avg.intValue());
|
||||
}
|
||||
|
||||
|
@ -450,7 +450,7 @@ public class SymmetricCrypto implements SymmetricEncryptor, SymmetricDecryptor,
|
||||
private SymmetricCrypto initParams(final String algorithm, AlgorithmParameterSpec paramsSpec) {
|
||||
if (null == paramsSpec) {
|
||||
byte[] iv = Opt.ofNullable(cipher)
|
||||
.map(JceCipher::getRaw).map(Cipher::getIV).get();
|
||||
.map(JceCipher::getRaw).map(Cipher::getIV).getOrNull();
|
||||
|
||||
// 随机IV
|
||||
if (StrUtil.startWithIgnoreCase(algorithm, "PBE")) {
|
||||
|
@ -54,7 +54,7 @@ public class StatementUtil {
|
||||
return StatementBuilder.of()
|
||||
.setConnection(conn)
|
||||
.setReturnGeneratedKey(returnGeneratedKey)
|
||||
.setSqlFilter(Opt.ofNullable(config).map(DbConfig::getSqlFilters).get())
|
||||
.setSqlFilter(Opt.ofNullable(config).map(DbConfig::getSqlFilters).getOrNull())
|
||||
.setSql(sql)
|
||||
.setParams(params)
|
||||
.build();
|
||||
@ -89,7 +89,7 @@ public class StatementUtil {
|
||||
return StatementBuilder.of()
|
||||
.setConnection(conn)
|
||||
.setReturnGeneratedKey(false)
|
||||
.setSqlFilter(Opt.ofNullable(config).map(DbConfig::getSqlFilters).get())
|
||||
.setSqlFilter(Opt.ofNullable(config).map(DbConfig::getSqlFilters).getOrNull())
|
||||
.setSql(sql)
|
||||
.setParamList(StreamUtil.of(paramsBatch).collect(Collectors.toList()))
|
||||
.buildForBatch();
|
||||
@ -109,7 +109,7 @@ public class StatementUtil {
|
||||
public static CallableStatement prepareCall(final DbConfig config, final Connection conn, final String sql, final Object... params) throws SQLException {
|
||||
return StatementBuilder.of()
|
||||
.setConnection(conn)
|
||||
.setSqlFilter(Opt.ofNullable(config).map(DbConfig::getSqlFilters).get())
|
||||
.setSqlFilter(Opt.ofNullable(config).map(DbConfig::getSqlFilters).getOrNull())
|
||||
.setSql(sql)
|
||||
.setParams(params)
|
||||
.buildForCall();
|
||||
|
@ -145,7 +145,7 @@ public class JSONConverter implements Converter, Serializable {
|
||||
if (obj instanceof Optional) {
|
||||
obj = ((Optional<?>) obj).orElse(null);
|
||||
} else if (obj instanceof Opt) {
|
||||
obj = ((Opt<?>) obj).get();
|
||||
obj = ((Opt<?>) obj).getOrNull();
|
||||
}
|
||||
|
||||
final JSON json;
|
||||
|
Loading…
x
Reference in New Issue
Block a user