Questions tagged «collectors»

12
Collectors.toMap中的Java 8 NullPointerException
如果其中一个值为“ null”,则Java 8 Collectors.toMap会抛出a NullPointerException。我不了解这种行为,地图可以包含空指针作为值,而没有任何问题。是否有充分的理由为什么值不能为null Collectors.toMap? 另外,是否有解决此问题的不错的Java 8方法,还是我应该还原为普通的for循环? 我的问题的一个例子: import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; class Answer { private int id; private Boolean answer; Answer() { } Answer(int id, Boolean answer) { this.id = id; this.answer = answer; } public int getId() { return id; } public void …

9
Java8:使用Stream / Map-Reduce / Collector将HashMap <X,Y>转换为HashMap <X,Z>
我知道如何List从Y-&gt; “转换”一个简单的Java Z,即: List&lt;String&gt; x; List&lt;Integer&gt; y = x.stream() .map(s -&gt; Integer.parseInt(s)) .collect(Collectors.toList()); 现在,我想对地图进行基本相同的操作,即: INPUT: { "key1" -&gt; "41", // "41" and "42" "key2" -&gt; "42 // are Strings } OUTPUT: { "key1" -&gt; 41, // 41 and 42 "key2" -&gt; 42 // are Integers } 解决方案不应限于String-&gt; Integer。就像List上面的示例一样,我想调用任何方法(或构造函数)。



1
Collectors.toSet()和HashSet
采取以下示例代码行: Set&lt;String&gt; someSet = someColletion.stream().map(p -&gt; p.toString()).collect(Collectors.toSet()); 我想要一个HashSet。将调试器用于代码,我确实得到了HashSet。我看了看java.util.stream.Collectors.toSet()下面的代码: public static &lt;T&gt; Collector&lt;T, ?, Set&lt;T&gt;&gt; toSet() { return new CollectorImpl&lt;&gt;((Supplier&lt;Set&lt;T&gt;&gt;) HashSet::new, Set::add, (left, right) -&gt; { left.addAll(right); return left; }, CH_UNORDERED_ID); } 合同担保a Set,实施决定a HashSet; 似乎是合理的。但是,我的实现需要aHashSet而不是仅任何old保证的恒定时间查找Set。如果的实现toSet()决定使用FooSet完全在其权限范围内的a ,则我的实现受到了损害。 解决此问题的最佳实践是什么?

5
Java 8 Collectors.toMap SortedMap
我正在使用Java 8 lambda,并且想要使用Collectors toMap返回一个SortedMap。我能想到的最好的Collectors toMap方法是使用一个虚拟对象mergeFunction并mapSupplier等于来调用以下方法TreeMap::new。 public static &lt;T, K, U, M extends Map&lt;K, U&gt;&gt; Collector&lt;T, ?, M&gt; toMap(Function&lt;? super T, ? extends K&gt; keyMapper, Function&lt;? super T, ? extends U&gt; valueMapper, BinaryOperator&lt;U&gt; mergeFunction, Supplier&lt;M&gt; mapSupplier) { BiConsumer&lt;M, T&gt; accumulator = (map, element) -&gt; map.merge(keyMapper.apply(element), valueMapper.apply(element), mergeFunction); return new CollectorImpl&lt;&gt;(mapSupplier, accumulator, …

3
Collectors.toList()返回哪种List <E>?
我正在阅读Lambda状态:图书馆版,但对以下陈述感到惊讶: 在Streams部分下,有以下内容: List&lt;Shape&gt; blue = shapes.stream() .filter(s -&gt; s.getColor() == BLUE) .collect(Collectors.toList()); 该文件没有说明shapes实际的内容,我也不知道它是否重要。 让我感到困惑的是:List此代码块返回什么样的具体代码? 它将变量分配给List&lt;Shape&gt;,这是完全可以的。 stream()也不filter()决定要使用哪种列表。 Collectors.toList()均未指定的具体类型List。 那么,这里使用的是什么具体类型(子类)List?有保证吗?

13
将列表沿元素拆分为子列表
我有这个清单(List&lt;String&gt;): ["a", "b", null, "c", null, "d", "e"] 我想要这样的东西: [["a", "b"], ["c"], ["d", "e"]] 换句话说,我想使用null值作为分隔符将列表拆分为子列表,以获得列表列表(List&lt;List&lt;String&gt;&gt;)。我正在寻找Java 8解决方案。我已经尝试过,Collectors.partitioningBy但是我不确定这是我要找的东西。谢谢!
67 java  list  java-8  collectors 

5
如何从地图生成具有不同值的地图(并使用BinaryOperator使用右键)?
我有一张地图Map&lt;K, V&gt;,我的目标是删除重复的值并Map&lt;K, V&gt;再次输出相同的结构。如果发现重复的值,则必须k从两个键(k1和k1)中选择一个保存这些值的键(),因此,假定BinaryOperator&lt;K&gt;提供k了k1并k2可用。 输入和输出示例: // Input Map&lt;Integer, String&gt; map = new HashMap&lt;&gt;(); map.put(1, "apple"); map.put(5, "apple"); map.put(4, "orange"); map.put(3, "apple"); map.put(2, "orange"); // Output: {5=apple, 4=orange} // the key is the largest possible 用我的尝试Stream::collect(Supplier, BiConsumer, BiConsumer)是位非常笨拙,包含可变操作,比如Map::put和Map::remove我想避免: // // the key is the largest integer possible (following the example above) final …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.