相关疑难解决方法(0)

如何将迭代器转换为流?

我正在寻找一种简洁的方法来将Iterator一个Stream或更具体的转换为"视图"迭代器作为流.

出于性能原因,我想在新列表中避免使用迭代器的副本:

Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
Collection<String> copyList = new ArrayList<String>();
sourceIterator.forEachRemaining(copyList::add);
Stream<String> targetStream = copyList.stream();
Run Code Online (Sandbox Code Playgroud)

根据评论中的一些建议,我也尝试使用Stream.generate:

public static void main(String[] args) throws Exception {
    Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator();
    Stream<String> targetStream = Stream.generate(sourceIterator::next);
    targetStream.forEach(System.out::println);
}
Run Code Online (Sandbox Code Playgroud)

但是,我得到了NoSuchElementException(因为没有调用hasNext)

Exception in thread "main" java.util.NoSuchElementException
    at java.util.AbstractList$Itr.next(AbstractList.java:364)
    at Main$$Lambda$1/1175962212.get(Unknown Source)
    at java.util.stream.StreamSpliterators$InfiniteSupplyingSpliterator$OfRef.tryAdvance(StreamSpliterators.java:1351)
    at java.util.Spliterator.forEachRemaining(Spliterator.java:326)
    at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
    at Main.main(Main.java:20)
Run Code Online (Sandbox Code Playgroud)

我已经看过StreamSupportCollections,但我没有发现任何东西.

java iterator java-8

425
推荐指数
6
解决办法
18万
查看次数

在Java 8中迭代枚举

是否可以Enumeration使用Lambda Expression 进行迭代?以下代码片段的Lambda表示形式是什么:

Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();

while (nets.hasMoreElements()) {
    NetworkInterface networkInterface = nets.nextElement();

}
Run Code Online (Sandbox Code Playgroud)

我没有在其中找到任何流.

java iteration lambda enumeration java-8

70
推荐指数
7
解决办法
5万
查看次数

如何获取所有会话值和名称?

如果我在会话中有值并且我需要在会话中获取所有值,例如

String[] name = request.getParameterValues("values");
HttpSession session = request.getSession();

for(String temp:name)
{
    if(temp.equalsIgnoreCase("a"))
    {
        session.setAttribute("a", temp);
        out.println("a is Running<br>");
    }

    if(temp.equalsIgnoreCase("b"))
    {
        session.setAttribute("b", temp);
        out.println("b is Running<br>");
    }

    if(temp.equalsIgnoreCase("c"))
    {
        session.setAttribute("c", temp);
        out.println("c is Running<br>");
    }

    if(temp.equalsIgnoreCase("d"))
    {
        session.setAttribute("d", temp);
        out.println("d is Running<br>");
    }

    if(temp.equalsIgnoreCase("e"))
    {
        session.setAttribute("e", temp);
        out.println("e is Running<br>");
    }

    if(temp.equalsIgnoreCase("f"))
    {
        session.setAttribute("f", temp);
        out.println("f is Running<br>");
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 如果我将一组复选框值转换为字符串。我将在 .jsp 中选择的所有值设置为会话对象。我只需要检索保存在上述代码中的 jsp 中的选定值。

java session jsp

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

在Java 8中将while循环转换为流

作为练习,我将一些旧代码转换为功能流。我对流了解不多。似乎转换此代码应该很简单,但是我运气不高。该方法从给定的整数开始,将其传递给isPrime,如果为素数则返回true。然后递出要打印的新(下一个)素数。如果isPrime为false,则我递增,然后检查下一个整数。

private static int nextPrime(final int number) {
    int i = number + 1;

    while (!isPrime(i)) {
        i++;
    }

    return i;
}
Run Code Online (Sandbox Code Playgroud)

java functional-programming java-8 java-stream

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