小编Lou*_*ler的帖子

为什么在java 8中转换类型的reduce方法需要一个组合器

我无法完全理解combinerStreams reduce方法中实现的角色.

例如,以下代码不编译:

int length = asList("str1", "str2").stream()
            .reduce(0, (accumulatedInt, str) -> accumulatedInt + str.length());
Run Code Online (Sandbox Code Playgroud)

编译错误说:( 参数不匹配; int无法转换为java.lang.String)

但是这段代码确实编译:

int length = asList("str1", "str2").stream()  
    .reduce(0, (accumulatedInt, str ) -> accumulatedInt + str.length(), 
                (accumulatedInt, accumulatedInt2) -> accumulatedInt + accumulatedInt2);
Run Code Online (Sandbox Code Playgroud)

我知道组合器方法用于并行流 - 所以在我的例子中它将两个中间累积的int加在一起.

但是我不明白为什么第一个例子在没有组合器的情况下编译或者组合器如何解决字符串到int的转换,因为它只是将两个整数加在一起.

任何人都可以阐明这一点吗?

java java-8 java-stream

123
推荐指数
3
解决办法
3万
查看次数

InetAddress.getByName 间歇性失败并出现系统错误

我有一些使用InetAddress.getByName. 间歇性地我得到一个UnknownHostException

java.net.UnknownHostException: google.com: System error
    at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:901)
    at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1293)
    at java.net.InetAddress.getAllByName0(InetAddress.java:1246)
    at java.net.InetAddress.getAllByName(InetAddress.java:1162)
    at java.net.InetAddress.getAllByName(InetAddress.java:1098)
    at java.net.InetAddress.getByName(InetAddress.java:1048)
Run Code Online (Sandbox Code Playgroud)

表演nslookup google.com作品,而失败本身只是偶尔发生。什么可能导致这种情况?

java nslookup

5
推荐指数
1
解决办法
1282
查看次数

能够在Java 8 lambda表达式中有效使用final变量的好处是什么?

我已经理解"有效最终"意味着什么,正如最终和有效最终之间差异所解释的那样.

我不明白为什么lambda表达式/烦人的内部类需要使用有效的最终变量?为什么Java 8会放宽变量必须声明为final的限制?

是否只是保存final变量之前的输入?或者能够有效使用最终变量的能力还有其他优势吗?

java lambda java-8

4
推荐指数
2
解决办法
458
查看次数

标签 统计

java ×3

java-8 ×2

java-stream ×1

lambda ×1

nslookup ×1