相关疑难解决方法(0)

Java 8 Iterable.forEach()vs foreach循环

在Java 8中,以下哪项更好?

Java 8:

joins.forEach(join -> mIrc.join(mSession, join));
Run Code Online (Sandbox Code Playgroud)

Java 7:

for (String join : joins) {
    mIrc.join(mSession, join);
}
Run Code Online (Sandbox Code Playgroud)

我有很多可以用lambdas"简化"的for循环,但使用它们真的有什么好处吗?它会改善他们的性能和可读性吗?

编辑

我还将这个问题扩展到更长的方法.我知道你不能从lambda中返回或破坏父函数,在比较它们时也应该考虑到这一点,但还有什么需要考虑的吗?

java for-loop java-8 java-stream

436
推荐指数
7
解决办法
35万
查看次数

Collection.stream().forEach()和Collection.forEach()有什么区别?

据我所知.stream(),我可以使用链操作.filter()或使用并行流.但是如果我需要执行小操作(例如,打印列表的元素),它们之间的区别是什么?

collection.stream().forEach(System.out::println);
collection.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

java collections java-8 java-stream

271
推荐指数
4
解决办法
6万
查看次数

这是Files.lines()中的错误,还是我误解了并行流的某些内容?

环境:Ubuntu x86_64(14.10),Oracle JDK 1.8u25

我尝试使用并行流Files.lines()但我想要.skip()第一行(它是带有标题的CSV文件).所以我试着这样做:

try (
    final Stream<String> stream = Files.lines(thePath, StandardCharsets.UTF_8)
        .skip(1L).parallel();
) {
    // etc
}
Run Code Online (Sandbox Code Playgroud)

但是后来一列未能解析成一个int ...

所以我尝试了一些简单的代码.文件问题很简单:

$ cat info.csv 
startDate;treeDepth;nrMatchers;nrLines;nrChars;nrCodePoints;nrNodes
1422758875023;34;54;151;4375;4375;27486
$
Run Code Online (Sandbox Code Playgroud)

代码同样简单:

public static void main(final String... args)
{
    final Path path = Paths.get("/home/fge/tmp/dd/info.csv");
    Files.lines(path, StandardCharsets.UTF_8).skip(1L).parallel()
        .forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)

系统地得到以下结果(好吧,我只运行了大约20次):

startDate;treeDepth;nrMatchers;nrLines;nrChars;nrCodePoints;nrNodes
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?


编辑似乎问题或误解比这更根深蒂固(下面的两个例子是由FreeNode的## java编写的):

public static void main(final String... args)
{
    new BufferedReader(new StringReader("Hello\nWorld")).lines()
        .skip(1L).parallel()
        .forEach(System.out::println);

    final Iterator<String> iter
        = Arrays.asList("Hello", "World").iterator();
    final Spliterator<String> spliterator
        = Spliterators.spliteratorUnknownSize(iter, …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing java-8 java-stream

34
推荐指数
3
解决办法
2842
查看次数

我应该在Java 8 Streams中使用共享的可变变量更新吗

只需在列表下面进行迭代并通过Java 8流添加到另一个共享的可变列表中。

List<String> list1 = Arrays.asList("A1","A2","A3","A4","A5","A6","A7","A8","B1","B2","B3");
List<String> list2 = new ArrayList<>();

Consumer<String> c = t -> list2.add(t.startsWith("A") ? t : "EMPTY");

list1.stream().forEach(c);
list1.parallelStream().forEach(c);
list1.forEach(c);
Run Code Online (Sandbox Code Playgroud)

以上三个迭代与我们需要使用哪个迭代有什么区别。有什么考虑吗?

java java-8 java-stream

7
推荐指数
1
解决办法
402
查看次数

每个`的Java8容器`和每个`的Stream`有什么区别

我知道我们可以List.foreach 用来遍历,我们也可以List.stream.foreach用来遍历.我不明白哪个在Java8中遍历更好.

java iteration java-8

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