From d89541364f3f8e6e915d2b6525dd34ed334dd0bd Mon Sep 17 00:00:00 2001 From: LoveHuahua Date: Tue, 28 Feb 2023 10:59:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9final=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/core/stream/EasyStream.java | 85 ++++++++++--------- .../cn/hutool/core/stream/EasyStreamTest.java | 55 ++++++------ 2 files changed, 71 insertions(+), 69 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java b/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java index fdd2d390c..51a46c18c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/stream/EasyStream.java @@ -275,52 +275,52 @@ public class EasyStream extends AbstractEnhancedWrappedStream mapper) { + public int sum(final ToIntFunction mapper) { return stream.mapToInt(mapper).sum(); } /** - * 计算long类型总和 + * 计算long类型的总和 * - * @param mapper 映射 - * @return long + * @param mapper 将对象转换为long的 {@link Function} + * @return long 总和 */ - public long sum(ToLongFunction mapper) { + public long sum(final ToLongFunction mapper) { return stream.mapToLong(mapper).sum(); } /** - * 计算double总和 + * 计算double类型的总和 * - * @param mapper 映射器 - * @return double + * @param mapper 将对象转换为double的 {@link Function} + * @return double 总和 */ - public double sum(ToDoubleFunction mapper) { + public double sum(final ToDoubleFunction mapper) { return stream.mapToDouble(mapper).sum(); } /** - * 计算number的总和 + * 计算 {@link Number} 类型的总和 * - * @param mapper 映射 - * @return {@link BigDecimal} + * @param mapper 将对象转换为{@link Number} 的 {@link Function} + * @return {@link BigDecimal} , 如果流为空, 返回 {@link BigDecimal#ZERO} */ public BigDecimal sum(final Function mapper) { - return stream.map(mapper).reduce(BigDecimal.ZERO, NumberUtil::add,NumberUtil::add); + return stream.map(mapper).reduce(BigDecimal.ZERO, NumberUtil::add, NumberUtil::add); } /** - * 计算bigDecimal平均值 并以四舍五入的方式保留2位精度 + * 计算 {@link BigDecimal} 类型的平均值 并以四舍五入的方式保留2位精度 * - * @param mapper 映射 - * @return {@link Opt}<{@link BigDecimal}> 如果元素的长度为0 那么会返回为空的opt + * @param mapper 将对象转换为{@link BigDecimal}的 {@link Function} + * @return {@link Opt}<{@link BigDecimal}>; 如果流的长度为0, 返回 {@link Opt#empty()} */ public Opt avg(final Function mapper) { return avg(mapper, 2); @@ -328,53 +328,54 @@ public class EasyStream extends AbstractEnhancedWrappedStream + * @param mapper 将对象转换为{@link BigDecimal} 的 {@link Function} + * @param scale 保留精度 + * @return {@link Opt}<{@link BigDecimal}> 如果流的长度为0, 返回 {@link Opt#empty()} */ - public Opt avg(final Function mapper, int scale) { + public Opt avg(final Function mapper, final int scale) { return avg(mapper, scale, RoundingMode.HALF_UP); } /** - * 计算bigDecimal平均值 + * 计算 {@link BigDecimal} 类型的平均值 * - * @param mapper 映射 - * @param scale 精度 + * @param mapper 将对象转换为{@link BigDecimal} 的 {@link Function} + * @param scale 保留精度 * @param roundingMode 舍入模式 - * @return {@link Opt}<{@link BigDecimal}> 如果元素的长度为0 那么会返回为空的opt + * @return {@link Opt}<{@link BigDecimal}> 如果元素的长度为0 那么会返回 {@link Opt#empty()} */ - public Opt avg(final Function mapper, int scale, RoundingMode roundingMode) { + public Opt avg(final Function mapper, final int scale, + final RoundingMode roundingMode) { //元素列表 List bigDecimalList = stream.map(mapper).collect(Collectors.toList()); if (CollUtil.isEmpty(bigDecimalList)) { - return Opt.ofNullable(null); + return Opt.empty(); } - return Opt.of(EasyStream.of(bigDecimalList).reduce(BigDecimal.ZERO, BigDecimal::add) + return Opt.ofNullable(EasyStream.of(bigDecimalList).reduce(BigDecimal.ZERO, BigDecimal::add) .divide(NumberUtil.toBigDecimal(bigDecimalList.size()), scale, roundingMode)); } /** - * 计算int平均值 + * 计算int类型的平均值 * - * @param mapper 映射器 - * @return {@link OptionalDouble} + * @param mapper 将对象转换为int 的 {@link Function} + * @return {@link OptionalDouble} 如果流的长度为0 那么会返回{@link OptionalDouble#empty()} */ - public OptionalDouble avg(ToIntFunction mapper) { + public OptionalDouble avg(final ToIntFunction mapper) { return stream.mapToInt(mapper).average(); } /** - * 计算double平均值 + * 计算double类型的平均值 * - * @param mapper 映射 - * @return {@link OptionalDouble} + * @param mapper 将对象转换为double 的 {@link Function} + * @return {@link OptionalDouble} 如果流的长度为0 那么会返回{@link OptionalDouble#empty()} */ - public OptionalDouble avg(ToDoubleFunction mapper) { + public OptionalDouble avg(final ToDoubleFunction mapper) { return stream.mapToDouble(mapper).average(); } @@ -382,10 +383,10 @@ public class EasyStream extends AbstractEnhancedWrappedStream mapper) { + public OptionalDouble avg(final ToLongFunction mapper) { return stream.mapToLong(mapper).average(); } diff --git a/hutool-core/src/test/java/cn/hutool/core/stream/EasyStreamTest.java b/hutool-core/src/test/java/cn/hutool/core/stream/EasyStreamTest.java index 5646d772f..2fa800d3a 100644 --- a/hutool-core/src/test/java/cn/hutool/core/stream/EasyStreamTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/stream/EasyStreamTest.java @@ -1,22 +1,31 @@ package cn.hutool.core.stream; -import cn.hutool.core.collection.CollUtil; +import static java.util.Collections.singletonList; + import cn.hutool.core.collection.ListUtil; import cn.hutool.core.lang.Opt; import cn.hutool.core.map.MapUtil; import cn.hutool.core.math.NumberUtil; -import java.math.RoundingMode; -import org.junit.Assert; -import org.junit.Test; - import java.math.BigDecimal; -import java.util.*; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.OptionalDouble; +import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; - -import static java.util.Collections.singletonList; +import org.junit.Assert; +import org.junit.Test; /** * @author VampireAchao @@ -490,7 +499,7 @@ public class EasyStreamTest { public void testLongSumAndAvg() { //测试long类型的sum long sum = EasyStream.of(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L).sum(Long::longValue); - Assert.assertEquals(55, sum); + Assert.assertEquals(55L, sum); //测试long类型的空元素 sum List longList = new ArrayList<>(); @@ -512,10 +521,8 @@ public class EasyStreamTest { @Test public void testBigDecimalSumAndAvg() { //测试bigDecimal的sum - BigDecimal sum = EasyStream.of(NumberUtil.toBigDecimal(1.1), NumberUtil.toBigDecimal(2.2), - NumberUtil.toBigDecimal(3.3), NumberUtil.toBigDecimal(4.4), NumberUtil.toBigDecimal(5.5), - NumberUtil.toBigDecimal(6.6), NumberUtil.toBigDecimal(7.7), NumberUtil.toBigDecimal(8.8), - NumberUtil.toBigDecimal(9.9), NumberUtil.toBigDecimal(10.10)).sum(Function.identity()); + BigDecimal sum = 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) + .sum(Function.identity()); Assert.assertEquals(NumberUtil.toBigDecimal(59.6), sum); //测试bigDecimal的sum 空元素 @@ -524,26 +531,20 @@ public class EasyStreamTest { Assert.assertEquals(BigDecimal.ZERO, emptySum); //测试bigDecimal的avg全参 - Opt bigDecimalAvgFullParam = EasyStream.of(NumberUtil.toBigDecimal(1.1), - NumberUtil.toBigDecimal(2.2), NumberUtil.toBigDecimal(3.3), NumberUtil.toBigDecimal(4.4), - NumberUtil.toBigDecimal(5.5), NumberUtil.toBigDecimal(6.6), NumberUtil.toBigDecimal(7.7), - NumberUtil.toBigDecimal(8.8), NumberUtil.toBigDecimal(9.9), NumberUtil.toBigDecimal(10.10)) + Opt 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); Assert.assertEquals(NumberUtil.toBigDecimal(5.96), bigDecimalAvgFullParam.get()); - //测试bigDecimal的avg双参 - Opt bigDecimalAvgOneParam = EasyStream.of(NumberUtil.toBigDecimal(1.1), - NumberUtil.toBigDecimal(2.2), NumberUtil.toBigDecimal(3.3), NumberUtil.toBigDecimal(4.4), - NumberUtil.toBigDecimal(5.5), NumberUtil.toBigDecimal(6.6), NumberUtil.toBigDecimal(7.7), - NumberUtil.toBigDecimal(8.8), NumberUtil.toBigDecimal(9.9), NumberUtil.toBigDecimal(10.10)) + //测试bigDecimal的avg单参 + Opt 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()); Assert.assertEquals(NumberUtil.toBigDecimal(5.96), bigDecimalAvgOneParam.get()); - //测试bigDecimal的avg单参 - Opt bigDecimalAvgTwoParam = EasyStream.of(NumberUtil.toBigDecimal(1.1), - NumberUtil.toBigDecimal(2.2), NumberUtil.toBigDecimal(3.3), NumberUtil.toBigDecimal(4.4), - NumberUtil.toBigDecimal(5.5), NumberUtil.toBigDecimal(6.6), NumberUtil.toBigDecimal(7.7), - NumberUtil.toBigDecimal(8.8), NumberUtil.toBigDecimal(9.9), NumberUtil.toBigDecimal(10.10)) + //测试bigDecimal的avg双参 + Opt 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); Assert.assertEquals(NumberUtil.toBigDecimal(5.96), bigDecimalAvgTwoParam.get());