问题标签 [collectors]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
67760 浏览

java - 什么样的清单Collectors.toList() 会返回吗?

我正在阅读State of the Lambda: Libraries Edition,并且对一个声明感到惊讶:

Streams部分下,有以下内容:

该文件没有说明shapes实际情况,我也不知道它是否重要。

让我感到困惑的是:List这段代码返回了什么样的具体内容?

  • 它将变量分配给 a List<Shape>,这完全没问题。
  • stream()也不filter()决定使用什么样的列表。
  • Collectors.toList()两者都没有指定List.

那么,这里使用的是什么具体类型(子类)List?有什么保证吗?

0 投票
2 回答
1889 浏览

java - 转换列表到地图计算发生次数

我正在玩 Java 8,我知道这必须通过阅读文档来实现,我只是不知道该怎么做。

我有以下工作代码:

重要的部分是我有一个List<Long>可能在某些数字有重复的Long数字。

现在我想将它转换为一个Map<Long, Long>作为键的元素和作为值的出现。

我以为:

会工作,但它不会。我在 java.util.stream.Collectors 文档中查找了示例。

我需要如何使用这些功能?

0 投票
2 回答
1924 浏览

java - IntStream.range(0, 1_000_000) 停在 113383 (Project Euler: Longest Collat​​z Sequence)

我的代码中有一个奇怪的问题来回答这个问题:

为正整数集定义了以下迭代序列:

n → n/2(n 为偶数)
n → 3n + 1(n 为奇数)

使用上述规则并从 13 开始,我们生成以下序列:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

可以看出,这个序列(从 13 开始,到 1 结束)包含 10 个术语。尽管尚未证明(科拉茨问题),但人们认为所有起始数字都以 1 结束。

哪个起始数字(低于 100 万)产生最长的链?

注意:一旦链启动,条款允许超过一百万。




调用代码大致如下:

换句话说,问题在于程序永远不会终止,我所看到的是它打印了从 1 到 113383 的所有整数,大概是从第一次.peek(System.out::println)调用开始的。

还有一个额外的问题是,目前我IntStream将我的盒子装进一个Stream<Integer>能够做的事情.collect(Collectors.toMap(i -> i, i -> (int)Iterators.intStream(new CollatzGenerator(i)).count()))......
我想摆脱拳击并使用该IntStream::collect方法,但是我不明白该怎么做。

0 投票
7 回答
44330 浏览

java - Collectors.groupingBy 不接受空键

在 Java 8 中,这有效:

但这不会:

Maps 允许使用 null 键,并且 List.class.getSuperclass() 返回 null。但是 Collectors.groupingBy 在 Collectors.java 第 907 行发出 NPE:

如果我创建自己的收集器,它将起作用,并将此行更改为:

我的问题是:

1) Collectors.groupingBy 的 Javadoc 并没有说它不应该映射一个空键。出于某种原因,这种行为是必要的吗?

2)是否有另一种更简单的方法来接受空键,而不必创建我自己的收集器?

0 投票
8 回答
245630 浏览

java - 如何将 Java8 流的元素添加到现有列表中

Collector 的 Javadoc展示了如何将流的元素收集到一个新的 List 中。是否有一种方法可以将结果添加到现有的 ArrayList 中?

0 投票
1 回答
1073 浏览

java - Java 8 收集器 API

这个问题涉及使用 java 8 收集器对元素进行映射和分组。我有一份病人名单。每个患者都有他访问过的部门的列表。假设我想计算每个部门使用 java 8 中的新收集器 API 访问了多少次,我将如何按部门列表分组?

谢谢!

注意:我知道我可以在每个部门设置一个柜台,这个问题完全是为了学习新的 java 8 特性。

代码:

在我的主要方法中,我有一个患者列表。我想知道每个部门,它被访问了多少次,而不编辑部门类(或扩展或装饰它)。

我想我必须采取一系列患者并将它们映射到部门->计数的地图(每个患者访问哪个部门的次数)。拥有这些地图的流 - 我不知道如何对这些地图进行分组并计算它们。

0 投票
3 回答
6195 浏览

java - 将 List 转换为 Map 并过滤空键

使用 java 8 流,我想将列表转换为映射,如Java 8 List<V> into Map<K, V>解决方案中所述。但是,我想过滤以删除具有某些键的条目(例如,如果键为空)而不将值转换为键两次。

例如,我可以在收集之前进行过滤,例如

在我的情况下,获取密钥的逻辑比简单地获取字段属性更复杂,我想避免先在过滤器中执行逻辑,然后再在 Collectors.toMap 的 keyMapper 函数中执行逻辑

如何使用自定义 keyMapper 函数将列表转换为地图并根据新键过滤某些值?

0 投票
3 回答
149 浏览

java - 垃圾收集器如何检测垃圾?

有人可以用简单的话解释一下 JAVA 垃圾收集器如何理解内存的哪一部分是“垃圾”吗?

我知道垃圾收集器实际上在做什么,但如何识别“垃圾”?

0 投票
12 回答
135094 浏览

java - 具有空条目值的 Collectors.toMap 中的 NullPointerException

Collectors.toMapNullPointerException如果其中一个值是 ,则抛出 a null。我不明白这种行为,地图可以包含空指针作为值而没有任何问题。值不能为空是否有充分的理由Collectors.toMap

另外,有没有一种很好的 Java 8 方法来解决这个问题,或者我应该恢复到普通的旧 for 循环?

我的问题的一个例子:

堆栈跟踪:

这个问题在 Java 11 中仍然存在。

0 投票
3 回答
85066 浏览

java - 收集HashMap> 爪哇 8

我希望能够将 a 转换List为 a HashMap,其中键是 the elementName,值是随机列表(在本例中是元素名称)。所以简而言之,我想要(A->List(A), B->List(B), C-> List(C))。我尝试使用toMap()并传递它keyMapperValueMapper但我得到一个编译错误。如果有人可以帮助我,我将不胜感激。

谢谢!

===这对我有用

感谢所有的帮助家伙!@izstas“他们应该对元素进行操作”帮助很大:)。实际上,这正是我想要的