Tag: java stream

没有参数且没有返回值的Java 8函数接口

什么是不需要任何东西并且什么都不返回的方法的Java 8函数接口? 即,相当于C#无参数Action与void返回types?

如何使用Java8 lambda按相反顺序对stream进行sorting?

我使用java lambdasorting列表。 我怎样才能以相反的方式sorting呢? 我看到这个post ,但我想用java 8 lambda。 这里是我的代码(我用* 1)作为黑客 Arrays.asList(files).stream() .filter(file -> isNameLikeBaseLine(file, baseLineFile.getName())) .sorted(new Comparator<File>() { public int compare(File o1, File o2) { int answer; if (o1.lastModified() == o2.lastModified()) { answer = 0; } else if (o1.lastModified() > o2.lastModified()) { answer = 1; } else { answer = -1; } return -1 * answer; […]

为什么我不能将整数映射到string从数组中stream式传输?

此代码工作(采取在Javadoc): List<Integer> numbers = Arrays.asList(1, 2, 3, 4); String commaSeparatedNumbers = numbers.stream() .map(i -> i.toString()) .collect(Collectors.joining(", ")); 这个不能编译: int[] numbers = {1, 2, 3, 4}; String commaSeparatedNumbers = Arrays.stream(numbers) .map((Integer i) -> i.toString()) .collect(Collectors.joining(", ")); IDEA告诉我,我有一个“在lambdaexpression式中不兼容的返回typesstring”。 为什么? 以及如何解决这个问题?

以单线forms获取Stream / List的最后一个元素

如何获得下面的代码中的stream或列表的最后一个元素? where data.careas是一个List<CArea> : CArea first = data.careas.stream() .filter(c -> c.bbox.orientationHorizontal).findFirst().get(); CArea last = data.careas.stream() .filter(c -> c.bbox.orientationHorizontal).collect(Collectors.toList()).; //how to? 正如你所看到的第一个元素,用一个特定的filter ,并不难。 然而,让单线的最后一个元素是一个真正的痛苦: 看来我无法直接从Stream获取它。 (这只对有限的stream才有意义) 也似乎你不能从List接口得到first()和last()这样的东西,这真的很痛苦。 我没有看到在List接口中没有提供first()和last()方法的任何参数,因为那里的元素是有序的,而且大小是已知的。 但按照原来的答案:如何获得有限的Stream的最后一个元素? 就个人而言,这是我能得到的最接近的: int lastIndex = data.careas.stream() .filter(c -> c.bbox.orientationHorizontal) .mapToInt(c -> data.careas.indexOf(c)).max().getAsInt(); CArea last = data.careas.get(lastIndex); 但是,它确实涉及到在每个元素上使用indexOf ,这很可能不是您通常想要的,因为它可能会影响性能。

获取stream的最后一个元素的最有效的方法

stream没有last()方法: Stream<T> stream; T last = stream.last(); // No such method 什么是最优雅和/或有效的方式来获得最后一个元素(或空的stream空)?

为什么在Java 8中转换types的reduce方法需要组合器?

我很难完全理解combiner在Streams中reduce方法的作用。 例如,下面的代码不会编译: int length = asList("str1", "str2").stream() .reduce(0, (accumulatedInt, str) -> accumulatedInt + str.length()); 编译错误说:( 参数不匹配; int不能转换为java.lang.String) 但是这个代码编译: int length = asList("str1", "str2").stream() .reduce(0, (accumulatedInt, str ) -> accumulatedInt + str.length(), (accumulatedInt, accumulatedInt2) -> accumulatedInt + accumulatedInt2); 我明白,合并器方法是并行stream – 所以在我的例子中,它是加在一起的两个中间积累的整数。 但我不明白为什么第一个例子不编译没有组合器或如何组合器是解决string转换为整数,因为它只是加在一起两个整数。 任何人都可以阐明这一点?

你能把一个stream分成两个stream吗?

我有一个由Java 8stream表示的数据集: Stream<T> stream = …; 我可以看到如何过滤它以获得一个随机子集 – 例如 Random r = new Random(); PrimitiveIterator.OfInt coin = r.ints(0, 2).iterator(); Stream<T> heads = stream.filter((x) -> (coin.nextInt() == 0)); 我还可以看到我怎样才能减less这个数据stream,例如,得到两个表示数据集中两个随机数的列表,然后将这些数据集转换回stream。 但是,是否有一种直接的方式来从最初的一个生成两个stream? 就像是 (heads, tails) = stream.[some kind of split based on filter] 感谢您的任何见解。

使用Java8将对象列表转换为从toString()方法获得的string

Java8中有很多有用的新东西。 例如,我可以在一个对象列表上迭代一个stream,然后对来自Object实例的特定字段的值进行求和。 例如 public class AClass{ int value; public int getValue(){return value;} } Integer sum = list.stream().mapToInt(AClass::getValue).sum(); 因此,我争论是否有任何方法来构build一个String ,从一行中的实例连接toString()方法的输出。 List<Integer> list =… String concatenated = list.stream()…. //concatenate here with toString() method from java.lang.Integer class 假设list包含整数2和3 ,我期望concatenated是"123"或"1,2,3" 。

为什么在静态初始化器中使用lambda进行并行stream导致死锁?

我遇到了一个奇怪的情况,在静态初始化器中使用带有lambda的并行stream看似永远没有CPU利用率。 代码如下: class Deadlock { static { IntStream.range(0, 10000).parallel().map(i -> i).count(); System.out.println("done"); } public static void main(final String[] args) {} } 这似乎是这种行为的最小再现testing案例。 如果我: 把该块放在主要的方法而不是一个静态初始化器, 删除并行,或 删除lambda, 代码即刻完成。 任何人都可以解释此行为? 这是一个错误还是这是打算? 我正在使用OpenJDK版本1.8.0_66内部。

Java 8 Streams FlatMap方法示例

我一直在检查即将到来的Java update ,即: Java 8 or JDK 8 。 是的,我很不耐烦,有很多新的东西,但是,有一些我不明白,一些简单的代码: final Stream<Integer>stream = Stream.of(1,2,3,4,5,6,7,8,9,10); stream.flatMap(); javadocs是 public <R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>> mapper) 返回一个stream,该stream包含将此stream的每个元素replace为通过将所提供的映射函数应用于每个元素而生成的映射stream的内容的结果。 每个映射stream在其内容放入此stream之后都会closures。 (如果映射stream为空,则使用空stream。)这是一个中间操作。 如果有人为flatMap创build了一些简单的现实生活中的例子,如何在之前的java版本中编写Java[6,7]以及如何使用Java 8编写相同的例程,我将不胜感激。