情景
需要对List集合里中的实体 某个属性进行分类 并且计数。有点像sql里的group by 并且分组计数
费劲不费心方法
比较省心的方式就是循环if
// 我就不放数据了
List list = new List();
int countA = 0;
int countB = 0;
...
for(i=0;i<list.size();i++){
if("类别A".equals(list.get(i))){
countA++;
}
if("类别B".equals(list.get(i))){
countB++;
}
...
}
但是此类方法 会手动创建N个count变量,JAVA我只听过不定参数的用法,没听过不定变量的方法。
感觉有点鸡肋。不如采用以下方法(请自行了解一些lambda表达式基本用法)
费心不费劲方法
// 提取要分类的字段 如上文的 "类别A" 的名称
List<String> fenlei = new ArrayList();
list.forEach(entity -> fenlei.add(entity.getType()));
// 利用jdk8对List新增的stream()方法 开始分类并且计数 存到Map类型的exp变量中
Map<String, Long> exp = express.stream().collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
/* Function是jdk8 新增的函数式接口,我了解也不多,同类的还有Consumer 等 */
// exp -> (key:分类名称 value:数量) PS:这里不是lambda表达式
其实搜解决办法到实现不过花费我1个小时而已,感觉并不是太费心
部分内容参考: CSDN博客