Tag: java stream

使用Java 8 JDK将Iterable转换为Stream

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

什么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准确。

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

我已经设法使用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; } […]

为什么这个Java Stream运行两次?

Java 8 API说: 直到stream水线的terminal操作被执行,才开始stream水线源的穿越。 那么为什么下面的代码抛出: java.lang.IllegalStateException:stream已经被操作或closures Stream<Integer> stream = Stream.of(1,2,3); stream.filter( x-> x>1 ); stream.filter( x-> x>2 ).forEach(System.out::print); 根据API的第一个过滤操作不应该在Stream上操作。

为什么java.util.Collection没有实现新的Stream接口?

我花了一些时间开始研究关于stream和lambdas的java-8嗡嗡声。 让我吃惊的是,你不能直接在java.util.Collection上应用Stream操作,比如.map() .filter() 。 是否有一个技术原因,为什么java.util.Collection接口没有扩展这些stream操作的默认实现? 使用Googlesearch一下,我看到很多例子都是按照以下模式进行编码的: List<String> list = someListExpression; List<String> anotherList = list.stream().map(x -> f(x)).collect(Collectors.toList()); 如果你在你的代码中有很多这样的stream操作,就会变得非常笨拙。 由于.stream()和.collect()与你想expression的内容完全无关,所以你更愿意说: List<String> list = someListExpression; List<String> anotherList = list.map(x -> f(x));

我怎样才能创build一个数组stream?

目前,无论何时我需要从数组创buildstream,我都这样做 String[] array = {"x1", "x2"}; Arrays.asList(array).stream(); 有一些直接的方法来创build数组的stream?

在Java中从java.util.stream.Stream中检索列表

我正在玩Java 8 lambda来轻松过滤集合。 但是,我没有find一个简洁的方法来检索结果作为一个新的列表在同一语句。 这是我迄今为止最简洁的方法: List<Long> sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L); List<Long> targetLongList = new ArrayList<>(); sourceLongList.stream().filter(l -> l > 100).forEach(targetLongList::add); 网上的例子没有回答我的问题,因为他们停止,而不会产生一个新的结果列表。 必须有一个更简洁的方法。 我会期望, Stream类的方法有toList() , toSet() ,… 有没有一种方法,variablestargetLongList可以直接由第三行分配?

Files.walk()计算总大小

我正在尝试计算光盘上文件的大小。 在java-7中,这可以使用Files.walkFileTree来完成,如我的答案所示。 但是,如果我想要使用java-8stream来完成这项工作,它将适用于某些文件夹,但不是全部。 public static void main(String[] args) throws IOException { long size = Files.walk(Paths.get("c:/")).mapToLong(MyMain::count).sum(); System.out.println("size=" + size); } static long count(Path path) { try { return Files.size(path); } catch (IOException | UncheckedIOException e) { return 0; } } 上面的代码将适用于patha:/files/但对于c:/它会抛出exception Exception in thread "main" java.io.UncheckedIOException: java.nio.file.AccessDeniedException: c:\$Recycle.Bin\S-1-5-20 at java.nio.file.FileTreeIterator.fetchNextIfNeeded(Unknown Source) at java.nio.file.FileTreeIterator.hasNext(Unknown Source) at java.util.Iterator.forEachRemaining(Unknown […]

Java 8stream逆序

一般问题:什么是扭转stream的正确方法? 假设我们不知道stream包含的元素是什么types,那么什么是反转任何stream的通用方法? 具体问题: IntStream提供范围方法来生成特定范围内的整数IntStream.range(-range, 0) ,现在我想反转它切换范围从0到负将不会工作,我也不能使用Integer::compare List<Integer> list = Arrays.asList(1,2,3,4); list.stream().sorted(Integer::compare).forEach(System.out::println); 与IntStream我会得到这个编译器错误 错误:( IntStream )ajc:typesIntStream中的sorted()方法不适用于参数( Integer::compare ) 我在那里错过了什么?

Word频率计数Java 8

如何计算Java 8中List的单词频率? List <String> = Lists.newArrayList("hello", "bye", "ciao", "bye", "ciao"); 结果必须是: {ciao=2, hello=1, bye=2}