相关疑难解决方法(0)

Java中有限生成的流 - 如何创建一个?

在Java中,可以轻松地生成无限流Stream.generate(supplier).但是,我需要生成一个最终完成的流.

想象一下,例如,我想要一个目录中所有文件的流.文件数量可能很大,因此我无法预先收集所有数据并从中创建流(via collection.stream()).我需要逐个生成序列.但是流很明显会在某个时刻完成,终端运营商喜欢(collect()findAny())需要对它进行处理,因此Stream.generate(supplier)不适合这里.

有没有合理的简单方法在Java中执行此操作,而不是自己实现整个Stream接口?

我可以想到一个简单的黑客 - 用无限做它Stream.generate(supplier),并在获取所有实际值时提供null或抛出异常.但是它会破坏标准的流操作符,我只能将它用于我自己的操作符,这些操作符都知道这种行为.

澄清

评论中的人提议我takeWhile()操作员.这不是我的意思.如何更好地表达问题...我不是在问如何过滤(或限制)现有的流,我问如何动态创建(生成)流,而不是先加载所有元素,但是流会有有限的大小(事先未知).

我正在寻找的代码是

    Iterator it = myCustomIteratorThatGeneratesTheSequence();
    StreamSupport.stream(Spliterators.spliteratorUnknownSize(it, Spliterator.DISTINCT), false);
Run Code Online (Sandbox Code Playgroud)

我刚看了一下java.nio.file.Files,该list(path)方法是如何实现的.

java java-8 java-stream

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

将输入流转换为对象列表

我必须制作一个 jar 来点击 API 来获取人员详细信息列表,该列表基本上有四个字段:id、name、salary、department。

我正在使用 apache httpclient 执行 get 请求,该请求在点击 API 时为我提供了 httpentity。

httpentity提供了一个获取response内容的方法,但它返回的是inputstream。

在通过 inputreader 读取此输入流并将其打印出来时,我确认它为我提供了人员详细信息列表。

但我不知道如何将其转换为人员详细信息列表。

那是 PersonDetails 对象:-

    public class PersonDetails {
        private UUID id;
        private String name;
        private String department;
        private Integer salary;
    
        public UUID getId() {
            return id;
        }
    
        public void setId(UUID id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getDepartment() {
            return department;
        }
    
        public void setDepartment(String …
Run Code Online (Sandbox Code Playgroud)

inputstream list jackson apache-httpclient-4.x

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