Tag: 收集器

Java Streams:获取按内部映射键分组的值

我有Map<A, Map> ,我希望使用Java Streams从中获取Map<B, List> 。 我尝试按如下方式进行: public Map<B, List> groupsByInnerKey(Map<A, Map> input) { return input.values() .stream() .flatMap(it -> it.entrySet().stream()) .collect(Collectors.groupingBy(Map.Entry::getKey)); } 我期待的是: flatMap给出Map.Entry collect(Collectors.groupingBy(…))获取应用于Map.Entry函数并返回B ,因此它将C值收集到List 。 但它没有编译,字面意思: 无法从静态上下文引用非静态方法 在最后一行的Map.Entry::getKey中。 有人可以解释什么是错的或什么是实现我想要的正确方法?

使用Collectors.summingInt时如何获取自定义类型而不是Integer?

我目前正在创建一个Map<String, Map> ,其中Integer表示秒: Map<String, Map> map = stream.collect(Collectors.groupingBy( x -> x.getProject(), Collectors.groupingBy( x -> x.getDate(), Collectors.summingInt(t -> t.getDuration().toSecondOfDay()) ) )); 我怎样才能创建Map<String, Map> ?

在Java 8中限制groupBy

如何通过每个条目限制groupBy? 例如(基于此示例: stream groupBy ): studentClasses.add(new StudentClass(“Kumar”, 101, “Intro to Web”)); studentClasses.add(new StudentClass(“White”, 102, “Advanced Java”)); studentClasses.add(new StudentClass(“Kumar”, 101, “Intro to Cobol”)); studentClasses.add(new StudentClass(“White”, 101, “Intro to Web”)); studentClasses.add(new StudentClass(“White”, 102, “Advanced Web”)); studentClasses.add(new StudentClass(“Sargent”, 106, “Advanced Web”)); studentClasses.add(new StudentClass(“Sargent”, 103, “Advanced Web”)); studentClasses.add(new StudentClass(“Sargent”, 104, “Advanced Web”)); studentClasses.add(new StudentClass(“Sargent”, 105, “Advanced Web”)); 此方法返回简单组: Map<String, […]

并行转换流时如何使用收集器

我实际上试图回答这个问题如何跳过从Files.lines获得的Stream 的行 。 所以我虽然这个收集器并不能很好地并行工作: private static Collector<String, ?, List> oddLines() { int[] counter = {1}; return Collector.of(ArrayList::new, (l, line) -> { if (counter[0] % 2 == 1) l.add(line); counter[0]++; }, (l1, l2) -> { l1.addAll(l2); return l1; }); } 但它的确有效。 编辑:它实际上没有工作; 我被我的输入集太小而无法触发任何并行性这一事实所迷惑; 见评论中的讨论 。 我认为它不会起作用,因为我想到了以下两个执行计划。 1. counter数组在所有线程之间共享。 线程t1读取Stream的第一个元素,因此满足if条件。 它将第一个元素添加到其列表中。 然后在他有时间更新数组值之前停止执行。 线程t2,从流的第4个元素开始,将其添加到其列表中。 所以我们最终得到了一个非想要的元素。 当然,既然这个collections家似乎有效,我猜它不会那样。 而且无论如何更新都不是primefaces的。 2.每个线程都有自己的数组副本 […]

如何在java流中对groupBy应用过滤

如何先分组,然后使用Java流应用过滤? 示例 :考虑此Employee类:我希望按部门分组,其中包含薪水大于2000的员工列表。 public class Employee { private String department; private Integer salary; private String name; //getter and setter public Employee(String department, Integer salary, String name) { this.department = department; this.salary = salary; this.name = name; } } 这就是我如何做到这一点 List list = new ArrayList(); list.add(new Employee(“A”, 5000, “A1”)); list.add(new Employee(“B”, 1000, “B1”)); list.add(new Employee(“C”, 6000, […]