如何计算项目在列表中的次数

时间:2018-12-06 21:20:01

标签: java

所以我一直在寻找解决问题的方法,但由于似乎不太恰当地表达问题,我似乎只是绕圈而行。

我收集了一些物品。例如:

  • 面包
  • 奶酪
  • 可乐
  • 可乐
  • 奶酪
  • 酥脆

我希望它打印出列表的精简版。预期结果:

  • 1 x面包
  • 2 x奶酪
  • 2 x可乐
  • 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循环,并可能在计算数量的地方添加一个新字段。

非常感谢。

2 个答案:

答案 0 :(得分:2)

以下是使用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);

答案 1 :(得分:1)

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}

地图将键与值相关联。您用钥匙把东西放进去,然后用钥匙把它们拿出来。地图中的键是唯一的。在此示例中,键是项目,值是该项目被查看的次数。我们遍历项目列表。对于每个项目,我们将从地图中将其计数。 (如果这是我们第一次为该商品创建一个新的0计数。)我们增加该商品的计数,然后将其放回Map中并继续直到遍历该列表。