Tag: java 8

“Java并发实践”仍然有效吗?

实践中的Java Concurrency仍然有效吗? 我想知道本书中介绍的思想,概念和实现是否仍然符合最新的Java版本。 我问,因为最新版本是在2006年完成的。

使用Java 8 JDK将Iterable转换为Stream

我有一个接口,它返回java.lang.Iterable<T> 。 我想用Java 8 Stream API来处理这个结果。 然而,Iterable不能“stream”。 任何更好的主意如何使用stream(没有将Iterable转换为List)?

列出<未来>到未来<列表>序列

我正在尝试将List<CompletableFuture<X>>转换为CompletableFuture<List<T>> 。 这是非常有用的,因为当你有很多的asynchronous任务,你需要得到所有的结果。 如果其中任何一个失败,那么最后的未来将失败。 这是我已经实现的: public static <T> CompletableFuture<List<T>> sequence2(List<CompletableFuture<T>> com, ExecutorService exec) { if(com.isEmpty()){ throw new IllegalArgumentException(); } Stream<? extends CompletableFuture<T>> stream = com.stream(); CompletableFuture<List<T>> init = CompletableFuture.completedFuture(new ArrayList<T>()); return stream.reduce(init, (ls, fut) -> ls.thenComposeAsync(x -> fut.thenApplyAsync(y -> { x.add(y); return x; },exec),exec), (a, b) -> a.thenCombineAsync(b,(ls1,ls2)-> { ls1.addAll(ls2); return ls1; },exec)); } 运行它: […]

在Windows XP上安装JDK8 – advapi32.dll错误

我下载了JDK8 build b121,并尝试安装时出现以下错误: 过程入口点RegDeleteKeyExA不能位于dynamic链接库ADVAPI32.dll中 操作系统是Windows XP,版本2002 Service Pack 3,32位。

generics返回types的上界 – 接口与类 – 令人惊讶的有效的代码

这是来自第三方库API的真实示例,但简化了。 用Oracle JDK 8u72编译 考虑这两种方法: <X extends CharSequence> X getCharSequence() { return (X) "hello"; } <X extends String> X getString() { return (X) "hello"; } 两人都报告“未经检查的演员”的警告 – 我明白了为什么。 让我感到困惑的是为什么我可以打电话 Integer x = getCharSequence(); 它编译? 编译器应该知道Integer没有实现CharSequence 。 打电话给 Integer y = getString(); 给出一个错误(如预期) incompatible types: inference variable X has incompatible upper bounds java.lang.Integer,java.lang.String 有人可以解释为什么这种行为被认为是有效的? 它将如何有用? 客户端不知道这个调用是不安全的 […]

什么Java 8 Stream.collect等价物在标准Kotlin库中可用?

在Java 8中,有Stream.collect ,它允许在集合上进行聚合。 在Kotlin中,这不是以同样的方式存在,除了可能作为stdlib中扩展函数的集合。 但是不清楚不同用例的等价关系是什么。 例如, JavaDoc for Collectors的顶部是为Java 8编写的示例,将它们移植到Kolin时,不能在不同的JDK版本上使用Java 8类,因此可能应该使用不同的方式编写。 就在线资源展示Kotlin集合的例子而言,它们通常是微不足道的,并没有真正与相同的用例相比较。 什么是真正符合Java 8 Stream.collectlogging的案例的好例子? 这里的列表是: 将名字积累到列表中 将名称累加到TreeSet中 将元素转换为string并连接它们,用逗号分隔 计算员工的工资总额 按部门分组员工 按部门计算工资总额 将学生划分为通过和失败 上面链接了JavaDoc中的细节。 注意: 这个问题是由作者故意写的和回答的( 自我回答的问题 ),所以对于常见的Kotlin话题的习惯性的回答是在SO中。 此外,为了澄清一些真正的古老的答案写为科特林的阿尔法,是不是今天的Kotlin准确。

JDK 8 – “typesjava.util.Map $条目无法parsing”

我试图使用一个HashMap,但得到错误: “typesjava.util.Map $ Entry无法parsing,它是从所需的.class文件间接引用” 我正在使用JDK 8和Eclipse。 有人知道为什么? 我的代码 import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.util.Map; import java.util.HashMap; public class Analyser { public void analyse() throws FileNotFoundException { HashMap<String, Integer> candyMap = new HashMap<String, Integer>(); BufferedReader br = new BufferedReader(new FileReader("Candy.txt")); for(String s=br.readLine(); s!=null; s=br.readLine()) { System.out.println(s); } } }

实例方法引用和Lambda参数

我无法理解方法引用的语法,其中有两个参数a和b ,引用是b上的一个方法。 例如,我明白如何 Arrays.sort(personArray, comparators::compareByName); 相当于 Arrays.sort(personArray, (o1, o2) -> comparators.compareByName(o1, o2)); 因为在这种情况下,lambda参数匹配方法调用参数(o1, o2) 。 如何为这个lambda stream.sorted((o1, o2) -> o1.compareToIgnoreCase(o2)); 我的IDE告诉我这相当于: stream.sorted(String::compareToIgnoreCase); 我没有find一个规则来replace语法: a.method(b)与方法引用。 例如,如果lambda有三个或更多的参数呢? 这是合法吗? 第一个参数是否成为方法目标,剩下的成为参数?

按对象值分组,按最大对象属性进行计数,然后设置组密钥

我已经设法使用Java 8 Streams API编写一个解决scheme,首先将对象Route列表按其值分组,然后统计每个组中的对象数。 它返回一个映射Route – > Long。 这里是代码: Map<Route, Long> routesCounted = routes.stream() .collect(Collectors.groupingBy(gr -> gr, Collectors.counting())); 路线类: public class Route implements Comparable<Route> { private long lastUpdated; private Cell startCell; private Cell endCell; private int dropOffSize; public Route(Cell startCell, Cell endCell, long lastUpdated) { this.startCell = startCell; this.endCell = endCell; this.lastUpdated = lastUpdated; } […]

什么是System.out :: println的等效lambdaexpression式

我偶然发现了以下使用System.out.println的方法引用的Java代码 class SomeClass{ public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1,2,3,4,5,6,7,8,9); numbers.forEach(System.out::println); } } } System.out::println的等效lambdaexpression式是什么?