java—如何计算一个项目在列表中的次数

wbrvyc0a  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(452)

我收集了一些东西。例如:
面包
奶酪
焦炭
焦炭
奶酪
薯片
我要它打印出清单的浓缩版。预期结果:
1 x面包
2份奶酪
2杯可乐
1 x薯片
我一直在用嵌套在for循环中的for循环来处理它。但我似乎没法让它发挥作用。
item类包含两个变量;项目名称和价格。
我已经成功地让循环计算总数,输出总值,并将每个项作为字符串输出。但我就是做不到。
我试着写下面的伪代码来帮助我,但我还是被卡住了。

for each item in list
    check item does not equal item currently being checked
    if item match
    then add one to item (quantity?) and delete duplicate element.
    else continue search.

我所能想到的是,我需要使用嵌套在for循环中的while循环,并可能在某个地方添加一个新字段来计算数量。

pepwfjgg

pepwfjgg1#

List<String> items = new ArrayList<>();
items.add("Bread");
items.add("Cheese");
items.add("Coke");
items.add("Coke");
items.add("Cheese");
items.add("Crisps");

Map<String, Integer> counts = new HashMap<>();
for (String item : items) {
    Integer count = counts.get(item);
    if (count == null) {
        count = new Integer(0);
    }
    count = count + 1;
    counts.put(item, count);
}

System.out.println(counts);

输出:
{薯片=1,可乐=2,奶酪=2,面包=1}
Map将键与值相关联。你用钥匙把东西放进去,然后用钥匙把它们拿出来。Map上的钥匙是独一无二的。在本例中,键是项,值是该项被看到的次数。我们遍历项目列表。对于每一件物品,我们都会从Map上得到它的数量(如果这是我们第一次为该项创建一个新的0计数。)我们增加该项的计数,并将其放回Map中,然后继续,直到遍历列表为止。

xpcnnkqh

xpcnnkqh2#

下面是如何使用java 8流实现完全相同的功能:

// java8 shorthand for creating a fixed list.
List<String> items = Arrays.asList("Bread","Cheese","Coke","Coke","Cheese","Crisps");
Map<String, Long> results = 
    items.stream().collect(
        groupingBy(
            Function.identity(), // the value of each string
            Collectors.counting()));// counts duplicates
System.out.println(results);

相关问题