相关疑难解决方法(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.nio库中的Files.walk()方法在Java 8中生成了一个Stream.问题是该方法默认包括根路径,但我不想要这个元素.在这种情况下,我使用filter()方法解决了这个代码:

public void listFiles(String directoryPath) {
    try {
        Path root = Paths.get(directoryPath);
        Files.walk(root,1)
            .filter(x -> !x.equals(root))
            .forEach(System.out::println);
    } catch (IOException ex) {
        System.err.println("Error reading file: " + directoryPath);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果有一种更优雅的方法来删除Stream的第一个元素而不是这个.例如,使用Stream中的索引或使用tail()方法作为其他函数语言.

java functional-programming filter java.nio.file java-stream

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

使用新的Java 8 Streams API解析唯一行的CSV文件

我想使用新的Java 8流API(对此我一个完整的新手)解析为一个特定的行中的CSV文件(其中以"内达"在名称列).使用以下文章获取动机,我修改并修复了一些错误,以便我可以解析包含3列的文件 - 'name','age'和'height'.

name,age,height
Marianne,12,61
Julie,13,73
Neda,14,66
Julia,15,62
Maryam,18,70
Run Code Online (Sandbox Code Playgroud)

解析代码如下:

@Override
public void init() throws Exception {
    Map<String, String> params = getParameters().getNamed();
    if (params.containsKey("csvfile")) {
        Path path = Paths.get(params.get("csvfile"));
        if (Files.exists(path)){
            // use the new java 8 streams api to read the CSV column headings
            Stream<String> lines = Files.lines(path);
            List<String> columns = lines
                .findFirst()
                .map((line) -> Arrays.asList(line.split(",")))
                .get();
            columns.forEach((l)->System.out.println(l));
            // find the relevant sections from the CSV file
            // we are only interested in the row with …
Run Code Online (Sandbox Code Playgroud)

java csv java-8 java-stream

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