Java 哈希码解密

Java 哈希码解密,java,lambda,Java,Lambda,我错在哪里了 可选。线程“main”中出现空异常 java.lang.IllegalStateException:在处为NULL lambda$2(IsItTheFlag.java:28)位于 java.util.Optional.orelsetrow(Optional.java:290)位于 main(IsItTheFlag.java:28) 公共类是该标志{ 私有静态布尔值isFlag(字符串str){ 返回str.hashCode()==1471587914&&str.toLowerCas

我错在哪里了

可选。线程“main”中出现空异常 java.lang.IllegalStateException:在处为NULL lambda$2(IsItTheFlag.java:28)位于 java.util.Optional.orelsetrow(Optional.java:290)位于 main(IsItTheFlag.java:28)

公共类是该标志{
私有静态布尔值isFlag(字符串str){
返回str.hashCode()==1471587914&&str.toLowerCase().hashCode()==1472541258;
}
公共静态void main(字符串[]args){
字符串offflag=“----”;
Stream aStream=Stream.empty();
对于(int i=0;inew-IllegalStateException(“NULL”);
if(isFlag(flag))
System.out.println(“你找到了!”);
其他的
System.out.println(“重试:(”);
}
私有静态流字母(){
从_a_到_z的流=IntStream.range((int)'a',1+(int)'z')。mapToObj(x->(char)x);
从_A_到_Z的流=IntStream.range((int)'A',1+(int)'Z')。mapToObj(x->(char)x);
从_0_到_9的流=IntStream.range((int)'A',1+(int)'Z')。mapToObj(x->(char)x);
返回流.concat(
Stream.concat(从_a_到_z,从_a_到_z),
从0到9);
}
专用静态流字(字符串前缀){
返回字母().map(x->prefix+x);
}
}

您在空流上调用此处理管道
aStream
,这将导致一个空的可选进程

aStream.parallel().filter(IsItTheFlag::isFlag).findAny();
由于
可选
中的值为空,因此引发此异常

stringStream.orElseThrow(() -> new IllegalStateException("NULL"))
此位:

str.hashCode() == 1471587914 && str.toLowerCase().hashCode() == 1472541258;
字符串在Java中是一种值类型,因此如果有两个字符串都是“喵喵”,它们很可能占用相同的内存空间,因此具有相同的
hashcode()
。但是,如果使用
toLowerCase()
对于该字符串,您会得到一个新的、不同的字符串,并且很可能会得到不同的哈希代码


所以问题是,你到底想用这行代码实现什么?

错误?为什么?你希望代码做什么?你希望在一个空流中有多少元素?
str.hashCode() == 1471587914 && str.toLowerCase().hashCode() == 1472541258;