问题标签 [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.
java - 什么样的清单Collectors.toList() 会返回吗?
我正在阅读State of the Lambda: Libraries Edition,并且对一个声明感到惊讶:
在Streams部分下,有以下内容:
该文件没有说明shapes
实际情况,我也不知道它是否重要。
让我感到困惑的是:List
这段代码返回了什么样的具体内容?
- 它将变量分配给 a
List<Shape>
,这完全没问题。 stream()
也不filter()
决定使用什么样的列表。Collectors.toList()
两者都没有指定List
.
那么,这里使用的是什么具体类型(子类)List
?有什么保证吗?
java - 转换列表到地图计算发生次数
我正在玩 Java 8,我知道这必须通过阅读文档来实现,我只是不知道该怎么做。
我有以下工作代码:
重要的部分是我有一个List<Long>
可能在某些数字上有重复的Long
数字。
现在我想将它转换为一个Map<Long, Long>
作为键的元素和作为值的出现。
我以为:
会工作,但它不会。我在 java.util.stream.Collectors 文档中查找了示例。
我需要如何使用这些功能?
java - IntStream.range(0, 1_000_000) 停在 113383 (Project Euler: Longest Collatz 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
方法,但是我不明白该怎么做。
java - Collectors.groupingBy 不接受空键
在 Java 8 中,这有效:
但这不会:
Maps 允许使用 null 键,并且 List.class.getSuperclass() 返回 null。但是 Collectors.groupingBy 在 Collectors.java 第 907 行发出 NPE:
如果我创建自己的收集器,它将起作用,并将此行更改为:
我的问题是:
1) Collectors.groupingBy 的 Javadoc 并没有说它不应该映射一个空键。出于某种原因,这种行为是必要的吗?
2)是否有另一种更简单的方法来接受空键,而不必创建我自己的收集器?
java - 如何将 Java8 流的元素添加到现有列表中
Collector 的 Javadoc展示了如何将流的元素收集到一个新的 List 中。是否有一种方法可以将结果添加到现有的 ArrayList 中?
java - Java 8 收集器 API
这个问题涉及使用 java 8 收集器对元素进行映射和分组。我有一份病人名单。每个患者都有他访问过的部门的列表。假设我想计算每个部门使用 java 8 中的新收集器 API 访问了多少次,我将如何按部门列表分组?
谢谢!
注意:我知道我可以在每个部门设置一个柜台,这个问题完全是为了学习新的 java 8 特性。
代码:
在我的主要方法中,我有一个患者列表。我想知道每个部门,它被访问了多少次,而不编辑部门类(或扩展或装饰它)。
我想我必须采取一系列患者并将它们映射到部门->计数的地图(每个患者访问哪个部门的次数)。拥有这些地图的流 - 我不知道如何对这些地图进行分组并计算它们。
java - 将 List 转换为 Map 并过滤空键
使用 java 8 流,我想将列表转换为映射,如Java 8 List<V> into Map<K, V>解决方案中所述。但是,我想过滤以删除具有某些键的条目(例如,如果键为空)而不将值转换为键两次。
例如,我可以在收集之前进行过滤,例如
在我的情况下,获取密钥的逻辑比简单地获取字段属性更复杂,我想避免先在过滤器中执行逻辑,然后再在 Collectors.toMap 的 keyMapper 函数中执行逻辑
如何使用自定义 keyMapper 函数将列表转换为地图并根据新键过滤某些值?
java - 垃圾收集器如何检测垃圾?
有人可以用简单的话解释一下 JAVA 垃圾收集器如何理解内存的哪一部分是“垃圾”吗?
我知道垃圾收集器实际上在做什么,但如何识别“垃圾”?
java - 具有空条目值的 Collectors.toMap 中的 NullPointerException
Collectors.toMap
NullPointerException
如果其中一个值是 ,则抛出 a null
。我不明白这种行为,地图可以包含空指针作为值而没有任何问题。值不能为空是否有充分的理由Collectors.toMap
?
另外,有没有一种很好的 Java 8 方法来解决这个问题,或者我应该恢复到普通的旧 for 循环?
我的问题的一个例子:
堆栈跟踪:
这个问题在 Java 11 中仍然存在。
java - 收集HashMap> 爪哇 8
我希望能够将 a 转换List
为 a HashMap
,其中键是 the elementName
,值是随机列表(在本例中是元素名称)。所以简而言之,我想要(A->List(A), B->List(B), C-> List(C)
)。我尝试使用toMap()
并传递它keyMapper
,ValueMapper
但我得到一个编译错误。如果有人可以帮助我,我将不胜感激。
谢谢!
===这对我有用
感谢所有的帮助家伙!@izstas“他们应该对元素进行操作”帮助很大:)。实际上,这正是我想要的