前面的语句尤其在Map的情况下是有效的,当这个决定背后的原因听起来像这样时,Map返回null如果一个键没有映射或者null映射到了这个键,那么我无法判断这个键是不存在还是缺少值。...、OptionalLong或OptionalDouble型。...为了消除这种风险,我们可以依赖于OptionalInt、OptionalLong和OptionalDouble。这些是int、long和double原始类型的包装器。...因此,请避免使用以下(及类似)解决方案: // Avoid Optional priceInt = Optional.of(50); Optional priceLong...(long id) { Optional cart = fetchCart(id); return !
---- 原始类型流特化 Java 8引入了三个原始类型特化流接口来解决这个问题: IntStream 、 DoubleStream 和LongStream ,分别将流中的元素特化为 int 、 long...---- 映射到数值流 (mapToInt 、 mapToDouble 和 mapToLong ) 将流转换为特化版本的常用方法是 mapToInt 、 mapToDouble 和 mapToLong...前面我们介绍了 Optional 类,这是一个可以表示值存在或不存在的容器。 Optional 可以用Integer 、 String 等参考类型来参数化。...对于三种原始流特化,也分别有一个 Optional 原始类型特化版本: OptionalInt 、 OptionalDouble 和 OptionalLong 。
Integer::sum); 为了避免不必要的拆箱和装箱,Java8引入了三个原始类型特化流接口: IntStream, LongStream和DoubleStream,将流中的元素特化为int, long...intStream = integerStream.mapToInt(x -> x); Stream boxedIntegerStream = intStream.boxed(); Stream<Long...而对于这三种特化流,有三个参数化的Optional类:OptionalInt, OptionalLong和OptionalDouble。
这里的容器包括:数组、集合、Map、Optional等等。...receiver.indexedValue( NodeImpl.LIST_ELEMENT_NODE_NAME, i, originalValue.get( i ) ); } } } // 提取Optional...@UnwrapByDefault class OptionalLongValueExtractor implements ValueExtractor { static final ValueExtractorDescriptor DESCRIPTOR = new ValueExtractorDescriptor(...new OptionalLongValueExtractor() ); @Override public void extractValues(OptionalLong originalValue
skip(long n) //产生一个流,它的元素是a的元素后面跟着b的元素 static Stream concat(Stream counting() // 产生一个收集器,对将mapper应用到收集到的元素上之后产生的值计算总和 static Collector summingLong(ToLongFunction mapper) static Collector combiner) 基本类型流上的方法与对象流上的方法类似,最主要的差异如下: toArray方法会返回基本类型数组 产生可选结果的方法会返回一个OptionalInt、OptionalLong
Java新特性:Optional类 Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。...1、Optional类概述 1.1、Optional类介绍 Optional 类是 Java 8 才引入的,Optional 是个容器,它可以保存类型 T 的值,或者仅仅保存 null。...Optional 对象 Optional optStudent = Optional.empty(); 2.2.2、Optional.of(T t)方法 使用 Optional.of...} } 3.2、避免使用基础类型的 Optional 对象 Optional 提供了的一些基础类型 —— OptionalInt、OptionalLong 以及 OptionalDouble...可以使用 Optional, Optional, Optional 等替代。
, long) / range(long, long) 这两个方法的区别在于一个是闭区间,一个是半开半闭区间: rangeClosed(1, 100) :[1, 100] range(1, 100) :...Optional 类 NullPointerException 可以说是每一个 Java 程序员都非常讨厌看到的一个词,针对这个问题, Java 8 引入了一个新的容器类 Optional,可以代表一个值存在或不存在...T 的值 Optional 类还有三个特化版本 OptionalInt,OptionalLong,OptionalDouble,刚刚讲到的数值流中的 max 方法返回的类型便是这个 Optional...汇总 (1)counting 用于计算总和: long l = list.stream().collect(counting()); 没错,你应该想到了,下面这样也可以: long l = list.stream...(Person::getAge))); 我们也可以直接使用 max 方法获得同样的结果 Optional optional = list.stream().max(comparing(Person
▪ java.util.Optional: java.util.OptionalDouble: java.util.OptionalInt: java.util.OptionalLong:...它本质上和 get()一样,也就是说,如果 Optional 有值则返回。否则,将抛出 NoSuchElementException 。...只有在当前映射到指定值时,才会替换指定键的条目。...boolean isReadLockStamp(long): 返回一个标记戳表示是否持有一个非独占锁(即 read lock )。 ...boolean isWriteLockStamp(long): 返回一个标记戳表示是否持有一个独占锁(即 write lock )。
类型:java.util.Optional, java.util.OptionalInt, java.util.OptionalLong, and java.util.OptionalDouble java...支持Optional这个特性很赞,首先Optional类型的成员变量可直接用于函数式编程,其次配置项不存在时又能避免启动失败 接下来试试用ConfigProperty注解修饰Optional类型的成员变量...的配置项,应用都不会抛出异常 @ConfigProperty(name = "optional.message") Optional optionalMessage;...存在的情况,如下图红框所示,optional.message在配置文件中是个正常的配置项 启动应用,浏览器访问web接口,如下图,optional info是配置项optional.message的值...配置项可以正常获取 配置项转为map 前面的接口嵌套,虽然将多层级的配置以对象的形式清晰的表达出来,但也引出一个问题:配置越多,接口定义或者接口方法就越多,代码随之增加 如果配置项的层级简单,还有种简单的方式将其映射到配置接口中
(有状态-有界) 终端 Optional BinaryOperator (T,T)->T count 终端 long 3.2.6 数值流 为了减少装箱拆箱的损耗,提供了mapToInt...(s)); System.out.println(longStream.sum()); //数值流Optional final OptionalLong max = longStream.max();...//获取最大值,如果不存在就用默认值10 final long l = max.orElse(10); //转换回对象流 final Stream boxed2 = longStream.boxed...[book2], CHINESE=Optional[book1], ENGLISH=Optional[book3]} **/ final Map>...(Book::getPrice))); Optional 一个包裹了流中按照给定比较器选出的最小元素的Optional或如果流为空则为Optional.empty() reducing使用示例:int
E extends Enum> extends EnumSet { public boolean add(E e) { typeCheck(e); long...oldElements; } } 这个实现非常非常非常的高大上:add方法只是对长整型数据element做了一个操作而已,也就是说EnumSet实际上将枚举值ordinal()保存在一个长整型long...我们知道Long型是64bit,那枚举值数量超过64咋办呢? 其实这个时候JDK就会用EnumSet的另一个实现JumboEnumSet 实际情况是:试问一下,谁的枚举值能定义64个这么多???...} } Random和ThreadLocalRandom 参考:【小家java】Java中Random ThreadLocalRandom 设置随机种子获取随机数精讲 OptionalInt和OptionalLong...和OptionalDouble 一看就能明白,这三个Optional都特别的相似,只是把Optional的泛型换成了具体类型而已。
作者:hapjin(Java架构沉思录做了部分修改) 原文:http://www.cnblogs.com/hapjin/p/4737207.html 1,对于待存储的海量数据,如何将它们分配到各个机器中去...因此,就有个问题,如何将这些海量的数据分配到各个机器中?数据分布到各个机器存储之后,又如何进行查找?这里主要记录一致性Hash算法如何将数据分配到各个机器中去。...哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的机器中去,而不会被映射到旧的机器集合中的其他机器上。...因为,在将实际的物理机器映射到环上时,有可能大部分机器都映射到环上的某一个部分(比如左半圆上),而通过引入虚拟机器节点,在进行机器hash映射时,不是映射具体机器,而是映射虚拟机器,并保证虚拟机器对应的物理机器是均衡的...先将机器映射到这个环上,再将数据也通过相同的哈希函数映射到这个环上,数据存储在它顺时针走向的那台机器上。以环为中介,实现了数据与机器数目之间的解藕。
("alice.txt")), StandardCharaset.UTF_8); List words = Arrays.asList(contents.split("PL+")); long...count = 0; for(String w : words){ if(w.length() > 12) count++; } // 使用流 long count = words.stream...:new)); // 通过链接操作来收集流中的所有字符串 String result = stream.collect(Collectors.join(", ")); summarizing(Int|Long...该方法会接受一个将流对象为数据的函数,同时,这些方法会产生类型为(Int|Long|Double)SummaryStatistics的结果,同时计算总和、数量、平均值、最小值和最大值。...IntStream.range(0, 100).boxed(); 基本类型流上的方法和对象流上的方法类似: toArray方法会返回基本类型数组 产生可选结果的方法会返回一个OptionalInt、OptionalLong
java.nio.file.FileStore:long getBlockSize(): 在这个文件存储中返回每个块的字数。...java.util.Optional: java.util.OptionalDouble: java.util.OptionalInt: java.util.OptionalLong: 每一个类都有一个新的方法...,orElseThrow() ,它本质上和 get() 一样,也就是说,如果 Optional 有值则返回。...只有在当前映射到指定值时,才会替换指定键的条目。 java.SplittableRandom: void nextBytes(byte[]): 用生成的伪随机字节填充一个用户提供的字节数组。...boolean isReadLockStamp(long): 返回一个标记戳表示是否持有一个非独占锁(即 read lock )。
java.nio.file.FileStore: long getBlockSize(): 在这个文件存储中返回每个块的字节数。...java.util.Optional: java.util.OptionalDouble: java.util.OptionalInt: java.util.OptionalLong: 每一个类都有一个新的方法...,orElseThrow() ,它本质上和 get() 一样,也就是说,如果 Optional 有值则返回。...只有在当前映射到指定值时,才会替换指定键的条目。 java.SplittableRandom: void nextBytes(byte[]): 用生成的伪随机字节填充一个用户提供的字节数组。...boolean isReadLockStamp(long): 返回一个标记戳表示是否持有一个非独占锁(即 read lock )。
最终能达到的效果: 识别JSON中的键值内容,默认情况下,Key始终是一个字符串,而value可以是String,boolean,double或long。...interface KvEntry extends Serializable { String getKey(); DataType getDataType(); Optional... getStrValue(); Optional getLongValue(); Optional getBooleanValue(...); Optional getDoubleValue(); String getValueAsString(); Object getValue();...后台运行iot-guide-tsl,并将镜像端口80080映射到本机的8080 docker run -d -p 8080:8080 sanshengshui/iot-guide-tsl 利用curl
/** * 删除记录 */ @Delete("DELETE FROM t_user WHERE id=#{id}") int delete(Long id); @Update 修改的时候和删除一样只要把...=#{username}, passwd=#{passwd} WHERE id=#{id}") int update(User user); @Select 查询的时候稍稍有些复杂,因为查询会涉及到如何将查出来的字段设置到对象上.../** * 根据ID查询,开了自动驼峰转换 */ @Select("SELECT * FROM t_user WHERE id=#{id}") User loadByIdAutoAlias(Long...其他注解 @Results:结果映射的列表, 包含了一个特别结果列如何被映射到属性或字段的详情。属 性:value, id。value 属性是 Result 注解的数组。...@Result:在列和属性或字段之间的单独结果映 射。属 性:id,column, property, javaType ,jdbcType ,type Handler, one,many。
领取专属 10元无门槛券
手把手带您无忧上云