如果我有:
List<Integer> listInts = { 1, 1, 3, 77, 2, 19, 77, 123, 14, 123... }
Run Code Online (Sandbox Code Playgroud)
在Java中,什么是创建List<Integer> listDistinctInts
仅包含不同值的有效方法listInts
?
我的直接想法是创建一个Set<Integer> setInts
包含所有值listInts
然后调用List<Integer> listDistinctInts = new ArrayList<>(setInts);
但这似乎效率低下 - 使用Java 7是否有更好的解决方案?
我没有使用Java 8,但我相信使用它我可以做这样的事情(?):
List<Integer> listDistinctInts = listInts.stream().distinct().collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
这会比上面的方法更高效和/或在Java 8中有更有效的方法吗?
最后,(我知道,如果我只关心不同元素的数量,那么提出多个问题可能会不受欢迎,但这是直接相关的)是否listInts
有更有效的方法来获得该值(在Java 7和8中) -没有先创建一个列表或所有不同元素的集合?
我最感兴趣的是使用本机Java方法来实现这一点并避免重新发明任何轮子,但如果它们提供更好的清晰度或性能,则会考虑手动代码或库.我已经阅读了这个相关的问题Java - 不同的对象列表,但是它并不完全清楚Java 7和8方法之间的性能差异,或者是否有更好的技术?