相关疑难解决方法(0)

解释如何将lambda分配给Iterable

我在这篇文章中遇到了一些聪明的代码,用于将Iterator转换为来自Karol的Stream .我必须承认,我不完全理解如何Iterable在以下代码中将lambda分配给该类型...

static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
    final Iterable<T> iterable = () -> iterator;
    return StreamSupport.stream(iterable.spliterator(), false);
}
Run Code Online (Sandbox Code Playgroud)

我决定编写自己的小测试以确保它编译和执行,并且确实如此.

public void printsStream_givenIterator()
{
    Iterator<String> iterator = Arrays.asList("a", "b", "c").iterator();
    final Iterable<String> iterable = () -> iterator;
    StreamSupport.stream(iterable.spliterator(), false).forEach(s -> System.out.println(s));
}

// prints: abc
Run Code Online (Sandbox Code Playgroud)

我的理解是lambda () -> iterator充当供应商的职能.

Iterable不是FunctionalInterface,那么如何为它分配这个lambda?

java lambda java-8

9
推荐指数
2
解决办法
3321
查看次数

如何将大型XML文件转换为对象的流式java8

Hy,我有一个(非常)大的XML文件(100GB)和一个foo列表,我想将它转换成一个流,就像它们引入对象的java 8一样:

任何lib或代码示例的想法?

在开始时:

<foos> 
  <foo>...</foo>
  <foo>...</foo>
</foos>
Run Code Online (Sandbox Code Playgroud)

在末尾:

Stream<Foo>  foosStream = ????("foo.xml")
streamFoos.forEach(foo->foo.doFooStuffs());
Run Code Online (Sandbox Code Playgroud)

编辑:@Pierre谢谢,这是您的解决方案的实现:

  try {
            XMLEventReader reader = XMLInputFactory.newInstance().
                    createXMLEventReader(stream);
            final Unmarshaller unmarshaller = JAXBContext.newInstance(XXXXX.class).createUnmarshaller();

            Iterator<XXXXX> it = new XmlIterator<>(reader, unmarshaller, "xxxxxx");
            return StreamSupport.stream(Spliterators.spliteratorUnknownSize(it, Spliterator.ORDERED), false);
        } catch (XMLStreamException e1) {
            logger.error("XMLStreamException", e1);
        } catch (JAXBException e) {
            logger.error("JAXBException", e);
        }
Run Code Online (Sandbox Code Playgroud)

public class XmlIterator<T> implements Iterator<T> {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    XMLEventReader reader;

    XMLEvent event;

    Unmarshaller unmarshaller;
    String name;

    public XmlIterator(XMLEventReader reader, Unmarshaller unmarshaller, String …
Run Code Online (Sandbox Code Playgroud)

java xml stream java-8

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

标签 统计

java ×2

java-8 ×2

lambda ×1

stream ×1

xml ×1