在列表中查找java中带有lambda的lenghtofargument

93ze6v8z  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(320)

在我的taks中,我需要找到参数的size(),并为每个对象打印大小。类型car的对象已设置好(因此这可能会有所帮助)
我做到了:

List<Integer> numberOf = cars
.stream
.map(car->car.getNumbers().size())
.collect(Collectors.toList());

System.out.println(numberOf);

输出为:[1,1,1,1]
我需要这样的输出:
奥迪-1宝马-1保时捷-1宾利-1
如果我同意

for(Car c: cars)
sout(c.getName + numberOf)

它给我奥迪[1,1,1,1]宝马[1,1,1,1]等等。
如何正确打印所有这些值。我还试图重写类car中的tostring方法,但也得到了相同的输出。
编辑:class car

public Car(String name, List<Colours> colours)
super(name);
this.colours= colours;
ss2ws0br

ss2ws0br1#

如果您想要像“name-number”这样的输出,可以生成字符串:

List<String> combined = cars
.stream
.map(car->car.getName + " - " + car.getNumbers().size())
.collect(Collectors.toList());

System.out.println(combined);
x3naxklr

x3naxklr2#

最简单的解决方案是:

cars.forEach(car -> 
            System.out.println(car.getName() + " - " + car.getNumbers().size()));

按名称分组:

import java.util.stream.Collectors;

import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;

Collection<Car> cars = ...// your cars
final Map<String, Long> grouped = 
    cars.stream()
        .collect(groupingBy(car -> car.getName(), counting()));
System.out.println(grouped);

相关问题