java - 将列表中每个元素的出现次数乘以 4

标签 java java-8 java-stream

我正在尝试实现以下场景。

enter image description here

我有一个 oldList,我正在尝试将每个元素的出现次数乘以 4,然后使用 Stream API 将它们放入 newList 中。 oldList 的大小未知,每次都可能以不同的大小出现。

我已经用下面两个传统的循环解决了这个问题;

private List< Integer > mapHourlyToQuarterlyBased( final List< Integer > oldList )
{

   List< Integer > newList = new ArrayList<>();

   for( Integer integer : oldList )
   {
      for( int i = 0; i < 4; i++ )
      {
       newList.add( integer );
      }
   }

   return newList;
}

但是我刚学了Stream API,想用它来巩固自己的知识。

最佳答案

您可以使用 flatMap 从原始 List 的每个元素生成一个包含 4 个元素的 Stream,然后生成单个 所有这些元素的流

List<Integer> mapHourlyToQuarterlyBased =
    oldList.stream()
           .flatMap(i -> Collections.nCopies(4, i).stream())
           .collect(Collectors.toList());

关于java - 将列表中每个元素的出现次数乘以 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38972738/

相关文章:

java - 用 java 8 foreach 替换 for 循环来更新值

java - 如何使用辅助方法过滤映射集合以防止 nullPointerException

Java:Map中的内部数据结构

java.lang.IllegalStateException : Fragment not attached to a context after API response

java - 给定类路径中包含相同类但 JRE 版本不同的 jar,Java 如何知道在运行时使用哪个类?

java - 如何在原始数组中收集 Stream 的结果?

Java 8 流计算所有键

java - Java 中的泛型类型使用

java - 尝试设置 Web 服务客户端时出现 "prefix is null"错误

java - 如何使用 Java Stream 根据输入文件中的字符将对象添加到二维数组