我上了3节课。
我想把所有工人“Angestellte”都放进他们的部门。所以基本上输出应该是:
Personalabteilung: 4
Buchhaltung: 3
Fertigung: 3
我正在尝试使用Department和Long将Map作为Map 但最终我想要Map with String和Long。
我也认为我的Collectors.counting()
不能像我说的那样工作。
在我已经映射之后,我真的不知道如何处理我的字符串流。那就是为什么我放三个?在代码中。
import java.util.*;
import java.util.function.Supplier;
import java.util.stream.Collectors;
public class ttest {
public static void main(String[] args){
Department d1 = new Department("Personalabteilung");
Department d2 = new Department("Buchhaltung");
Department d3 = new Department("Fertigung");
List<Angestellte> AlleAng = Arrays.asList(
new Angestellte("Sandra","Bullock",d3,3450, "Female"),
new Angestellte("Yutta","Knie",d1,2800, "Female"),
new Angestellte("Ludwig","Herr",d3,3850, "Male"),
new Angestellte("Peter","Pan",d2,1850, "Male"),
new Angestellte("Nicky","Smith",d3,2100, "Female"),
new Angestellte("Herbert","Rotwein",d2,2450, "Male"),
new Angestellte("Sandra","Siech",d1,1100, "Female"),
new Angestellte("Florian","Schwarzpeter",d2,2800, "Male"),
new Angestellte("Herrietta","Glas",d1,2100, "Female"),
new Angestellte("Brock","Builder",d1,6000, "Male"));
Map<Department, Long> DepAnz = AlleAng.stream()
.map(a -> a.getDep())
.collect(Collectors.toMap(a.getDep???, Collectors.counting()));
}
}
答案 0 :(得分:3)
如果你想按部门分组,你的getter被称为getDep()
你可以
Map<Department, Long> DepAnz = AlleAng.stream()
.collect(Collectors.groupingBy(a -> a.getDep(), Collectors.counting()));
答案 1 :(得分:2)
您需要使用以下组:
^((<#a#>)+|[;]|(([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5}){1,25})+)+$
groupingBy(classifier, downstream)
收集器是一个收集器,它将Stream元素收集到Map<Department, Long> DepAnz =
AlleAng.stream()
.collect(Collectors.groupingBy(Angestellte::getDep, Collectors.counting()));
中,其中键由分类器返回,值是将下游收集器应用于具有以下内容的所有Stream元素的结果。同等的钥匙。在这种情况下,我们想要的是计算值,以便我们使用Collectors.counting()
作为下游收集器。
如果你想通过部门的名称进行分组,你可以这样做,假设getter被称为Map
来检索名称:
.getName()
这将返回所有不同部门名称的计数。
答案 2 :(得分:0)
Map<String, Long> map = AlleAng.stream().collect(Collectors.toMap(a -> a.getDept().getName(), a -> 1L, (Long acc, Long newValue) -> acc + newValue));
这是lambda的冗长用法,可以满足您的需求。 使用toMap Collector以根据您获得的实际Angestellte引用映射特定键和值。 当然,石斑鱼功能最适合,但这可以作为一些标准的地图分组的通用示例