相关疑难解决方法(0)

你能将一个流分成两个流吗?

我有一个由Java 8流表示的数据集:

Stream<T> stream = ...;
Run Code Online (Sandbox Code Playgroud)

我可以看到如何过滤它以获得随机子集 - 例如

Random r = new Random();
PrimitiveIterator.OfInt coin = r.ints(0, 2).iterator();   
Stream<T> heads = stream.filter((x) -> (coin.nextInt() == 0));
Run Code Online (Sandbox Code Playgroud)

我还可以看到如何减少此流以获得,例如,两个列表代表数据集的两个随机半部分,然后将它们转换回流.但是,有没有直接的方法从最初的流生成两个流?就像是

(heads, tails) = stream.[some kind of split based on filter]
Run Code Online (Sandbox Code Playgroud)

感谢您的任何见解.

java java-8 java-stream

129
推荐指数
7
解决办法
8万
查看次数

Java 8 Stream:过滤,处理结果,然后处理排除

在Java 8的Streams中,我知道如何基于谓词过滤集合,并处理谓词为真的项目.我想知道的是,如果谓词将集合分成两组,是否可以通过API根据谓词进行过滤,处理过滤后的结果,然后立即链接调用以处理过滤器排除的所有元素?

例如,请考虑以下列表:

List<Integer> intList = Arrays.asList(1,2,3,4);
Run Code Online (Sandbox Code Playgroud)

有可能做到:

intList.stream()
    .filter(lessThanThree -> lessThanThree < 3)
    .forEach(/* process */)
    .exclusions(/* process exclusions */); //<-- obviously sudocode
Run Code Online (Sandbox Code Playgroud)

或者我是否必须只forEach对已过滤的项目执行此过程,然后调用stream()filter()在原始列表上处理剩余的项目?

谢谢!

java java-8 java-stream

9
推荐指数
1
解决办法
1707
查看次数

使用流 API 将数字列表拆分为两个单独的奇数和偶数列表

我正在学习Java8,想要使用Java8中的流API执行以下操作。

输入: (1,2,3,4,5,6,7,8,9) 列表

输出: 奇数列表 - (1,3,5,7,9) 偶数列表 - (2,4,6,8)

我可以在传统java中的单个for循环中执行此操作,例如

List<Integer> ints = Arrays.asList(3,4,2,5,6,7,4,5);
List<Integer> oddList = new ArrayList<>();
List<Integer> evenList = new ArrayList<>();

for (Integer i : ints) {
    if (i % 2 == 0) {
        evenList.add(i);
    } else {
        oddList.add(i);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道一种以 Java8 风格执行此操作的方法,如下所示 -

List<Integer> evens = ints.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
List<Integer> odds = ints.stream().filter(i -> i % 2 == 1).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但这里的问题是我迭代了两次而不是一次整数。有没有一种方法可以做到这一点而无需在流中迭代两次?

java java-8 java-stream

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

标签 统计

java ×3

java-8 ×3

java-stream ×3