当前位置: 首页 > 面试题库 >

是否存在与Scala的集合“ collect”等效的Java Stream方法?

杨志强
2023-03-14
问题内容

Scala的集合提供了一个名为方法collect是合并filtermap成一个单一的方法。在筛选Object集合以产生仅包含特定类型的该集合的子集时,此功能特别有用。

Java 8的Stream是否有这样的事情?


问题答案:

考虑到Java的类型系统filtermap在一个步骤中组合使用和并没有多大用处。例如,没有这种PartialFunction类型。

最接近的是flatMap

List<Object> list=Arrays.asList(0, "foo", 0L, 42.0, true, "false");
List<String> sList = list.stream()
  .flatMap(o-> o instanceof String? Stream.of((String)o): Stream.empty())
  .collect(Collectors.toList());
System.out.println(sList);

但表现力

.flatMap(o-> o instanceof String? Stream.of((String)o): Stream.empty())

不比

.filter(o -> o instanceof String).map(o -> (String)o)

当然,您可以创建一个辅助方法,将这些步骤封装在一个不可分解的操作中:

static <T> Stream<T> onlyType(Stream<?> s, Class<T> type) {
    return s.filter(type::isInstance).map(type::cast);
}

那么你可以像这样使用它

List<String> sList=onlyType(list.stream(), String.class).collect(Collectors.toList());


 类似资料:
  • 问题内容: 我想将一个函数应用于Java集合,在这种特殊情况下为map。有没有很好的方法可以做到这一点?我有一张地图,想对地图中的所有值运行trim(),并让地图反映更新。 问题答案: 对于Java 8的lambda,这是一个衬里: 出于历史的考虑,这是一个没有lambda的版本: 或者,更一般而言:

  • 问题内容: 我有两个对象,想要将它们配对,就像中的函数一样。我很确定JDK中没有此功能,但是在相当广泛的库中是否有类似通用收藏集的类似内容?谢谢。 问题答案: 功能Java具有zip,zipWith以及zipIndex您对或的期望。(实际上,作者几乎都是Haskell程序员。)

  • 添加日志语句后,getViewType似乎只接收到0的位置。这导致onCreateView只加载一个布局: 加载CommentFragment的片段转换: 片段的OnCreateView: 适配器代码(感谢hister让我开始): 使用上面的代码,只显示头布局,因为viewType始终为0。看起来是这样的。如果我强制另一个布局,它看起来如下所示:

  • 问题内容: Java具有格式字符串的概念,与其他语言的格式字符串非常相似。它用于诸如输出转换之类的JDK方法中。 我想知道在Java中是否有类似于C的输入转换方法? 问题答案: 看一下该站点,它解释了两种使用java中的控制台读取的方法,使用或使用System.in中的经典方法。 以下代码摘自引用的网站: - 问候。

  • 问题内容: 我有两个对象,想要将它们配对,就像Python中的函数一样。我很确定JDK中没有此功能,但是在相当广泛的库中是否有类似Apache通用收藏集的类似内容?谢谢。 问题答案: 功能Java具有,以及您对Haskell或Scala的期望。(实际上,作者几乎都是Haskell程序员。)

  • 问题内容: 我有一个脚本,可以用来构造表和存储过程。例如,我有一个类型为的列。需要一个size参数,该大小我也用作存储过程以及这些过程中的参数。 是否有可能具有a的等价形式,因此我可以轻松调整大小而无需在整个脚本中进行更改? 我正在使用MySql工作台。 编辑 我曾尝试和 我有一个脚本-这是(删节的) 我想要实现的是用一个 常量 替换脚本中的值25-类似于创建表和存储过程的脚本顶部的a ,因此我能