假如现在有一个实体类A,字段有颜色和尺寸,每个颜色对应多个尺寸,然后一个集合中有多个A,怎么用java8特性获取颜包含最多尺寸的颜色并输出
时间: 2024-05-05 15:15:37 浏览: 77
假设实体类A如下:
```
public class A {
private String color;
private String size;
public A(String color, String size) {
this.color = color;
this.size = size;
}
public String getColor() {
return color;
}
public String getSize() {
return size;
}
}
```
可以使用Java 8 Stream API来解决这个问题。首先,需要将集合中的对象按颜色分组,然后对每个颜色的尺寸进行计数,最后找出包含最多尺寸的颜色。
代码如下:
```
List<A> list = new ArrayList<>();
// 添加A对象到集合中
Map<String, Long> colorSizeCountMap = list.stream()
.collect(Collectors.groupingBy(A::getColor, Collectors.counting()));
Optional<Map.Entry<String, Long>> maxEntry = colorSizeCountMap.entrySet().stream()
.max(Map.Entry.comparingByValue());
if (maxEntry.isPresent()) {
System.out.println("颜色为" + maxEntry.get().getKey() + "的尺寸最多,共有" + maxEntry.get().getValue() + "个尺寸。");
} else {
System.out.println("集合为空。");
}
```
首先,使用`Collectors.groupingBy`方法按颜色分组,并使用`Collectors.counting`方法计算每个颜色的尺寸数量,生成一个`Map<String, Long>`类型的结果。
然后,使用`Map.Entry.comparingByValue`方法来比较每个颜色的尺寸数量,找到包含最多尺寸的颜色。最后,将结果输出到控制台。
需要注意的是,如果集合为空,需要进行相应的处理。
阅读全文