package test9; import java.util.DoubleSummaryStatistics; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.Stream; public class StreamTest { public static void main(String[] args) { Optional<Integer> optional = Optional.of(123); System.out.println("创建一个Optional对象的方式一:" + optional.get()); Optional<Integer> optional2 = Optional.ofNullable(null); System.out.println("Optional操作:对象是否为空:" + !optional2.isPresent()); Optional<Double> result = Optional.of(4.0).flatMap(StreamTest::squareRoot).flatMap(StreamTest::inverse); System.out.println("Optional操作:flatMap可以循环调用其中的方法,4.0的平方根处以2是:" + result.get()); String str = Stream.of("一", "二", "三", "四", "五", "六").collect(Collectors.joining(","));// joining参数可为空,即结果中将没有"," System.out.println("流操作:将此流中的所有元素组合成一条字符串返回:\t" + str); DoubleSummaryStatistics summary = Stream.of(12, 10, 54, 8, 132, 589, 4) .collect(Collectors.summarizingDouble(Integer::intValue)); System.out.println("流操作:最大值:" + summary.getMax() + "\t最小值:" + summary.getMin() + "\t平均值:" + summary.getAverage() + "\t总和:" + summary.getSum() + "\t元素的个数:" + summary.getCount()); } // 计算平方根 private static Optional<Double> squareRoot(Double x) { return x < 0 ? Optional.empty() : Optional.of(Math.sqrt(x)); } private static Optional<Double> inverse(Double x) { return x == 0 ? Optional.empty() : Optional.of(x / 2); } }
打印结果:
创建一个Optional对象的方式一:123
Optional操作:对象是否为空:true
Optional操作:flatMap可以循环调用其中的方法,4.0的平方根处以2是:1.0
流操作:将此流中的所有元素组合成一条字符串返回: 一,二,三,四,五,六
流操作:最大值:589.0 最小值:4.0 平均值:115.57142857142857 总和:809.0 元素的个数:7