Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java 8中,如何获取流<;T>;从流<;?扩展集合<;T>>;?_Java_Collections_Java 8_Java Stream - Fatal编程技术网

在Java 8中,如何获取流<;T>;从流<;?扩展集合<;T>>;?

在Java 8中,如何获取流<;T>;从流<;?扩展集合<;T>>;?,java,collections,java-8,java-stream,Java,Collections,Java 8,Java Stream,在Java8中,使用包Java.util.function和Java.util.stream以及新的语言特性lambda和方法引用,将流转换为流的最佳方法是什么 这是一个例子,我已经找到了解决方案,但我不满意。为了从流创建流,我将collect().Stream()与中间哈希集(我的集合是集) 我只使用了getProviders()和getServices来快速构建流,以拥有流来演示这个问题。您可以使用集合#流 <T> Stream<T> flatten(Stream&l

在Java8中,使用包
Java.util.function
Java.util.stream
以及新的语言特性lambda和方法引用,将
转换为
的最佳方法是什么

这是一个例子,我已经找到了解决方案,但我不满意。为了从
创建
,我将
collect().Stream()
与中间
哈希集
(我的
集合

我只使用了
getProviders()
getServices
来快速构建
,以拥有
来演示这个问题。

您可以使用
集合#流

<T> Stream<T> flatten(Stream<? extends Collection<? extends T>> stream){
    return stream.flatMap(Collection::stream);
}

请注意,如果不调用此函数,可能不会产生与示例中元素完全相同的流,因为如果存在重复项,则收集到集合中会删除重复项。

而不是
算法->out.format(“%s%n”,algorithm)
您可以编写
out::println
,它更短更快。@PeterLawrey谢谢,你说得对。我已经相应地更新了我的问题和答案。你可以将
.map(Provider::getServices).flatMap(Set::stream)
替换为
.flatMap(p->p.getServices().stream())
@PeterLawrey谢谢,你说得对。我已经相应地更新了我的问题和答案。@Alex感谢您指出
distinct
。我已经相应地更新了答案。
import static java.security.Security.getAlgorithms;
public class ListMessageDigests {
    public static void main(final String... args) {
        getAlgorithms("MessageDigest")
            .forEach(out::println);
    }
}
<T> Stream<T> flatten(Stream<? extends Collection<? extends T>> stream){
    return stream.flatMap(Collection::stream);
}
import static java.lang.System.out;
import static java.security.Provider.Service;
import static java.security.Security.getProviders;
import static java.util.Arrays.stream;

public class ListMessageDigests {
    public static void main(final String... args) {
        stream(getProviders())
            .flatMap(p -> p.getServices().stream())
            .distinct()
            .filter(service -> "MessageDigest".equals(service.getType()))
            .map(Service::getAlgorithm)
            .sorted()
            .forEach(out::println);
    }
}