相关疑难解决方法(0)

为什么并行流在Java 8中按顺序收集

为什么要forEach以随机顺序打印数字,同时collect始终按原始顺序收集元素,即使是从并行流中收集?

Integer[] intArray = {1, 2, 3, 4, 5, 6, 7, 8};
List<Integer> listOfIntegers = new ArrayList<>(Arrays.asList(intArray));

System.out.println("Parallel Stream: ");
listOfIntegers
  .stream()
  .parallel()
  .forEach(e -> System.out.print(e + " "));
System.out.println();

// Collectors         
List<Integer> l = listOfIntegers
  .stream()
  .parallel()
  .collect(Collectors.toList());
System.out.println(l);
Run Code Online (Sandbox Code Playgroud)

输出:

Parallel Stream: 
8 1 6 2 7 4 5 3 
[1, 2, 3, 4, 5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

java parallel-processing java-8 java-stream

33
推荐指数
2
解决办法
8971
查看次数

加入限制字符串

仅使用标准Java库,什么是将字符串连接到限制的简单机制,并在限制导致更短的字符串时附加省略号?

效率是可取的.加入所有字符串然后使用String.substring()可能会消耗过多的内存和时间.可以在Java 8流管道中使用的机制是可取的,因此甚至可能永远不会创建超过限制的字符串.

就我的目的而言,我很满意以下两种方式表达的限制:

  • 要加入的最大字符串数
  • 结果中的最大字符数,包括任何分隔符.

例如,这是使用标准库在Java 8中强制执行最大数量的连接字符串的一种方法.有更简单的方法吗?

final int LIMIT = 8;

Set<String> mySet = ...;
String s = mySet.stream().limit( LIMIT ).collect( Collectors.joining(", "));
if ( LIMIT < mySet.size()) {
    s += ", ...";
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

6
推荐指数
2
解决办法
1590
查看次数

标签 统计

java ×2

java-8 ×2

java-stream ×2

parallel-processing ×1