gpt4 book ai didi

java - 在 Java 中将值附加到列表的元素

转载 作者:行者123 更新时间:2023-12-01 17:46:14 25 4
gpt4 key购买 nike

我有一个整数列表,我从中计算重复次数并使用 map 将其打印出来。现在,Items 列表中的每个整数都必须分配给它们特定的值。

我的输出是:

2 x 3

8 x 1

最终我想要实现的是:

2 x 3 $5.50

8 x 1 $12.50

Total = $29

这意味着整数 2 和 8 各有一个值,分别为 5.50 美元和 12.50 美元。

  1. 在 Java 中为该列表中的整数赋值的最佳方式是什么?

  2. 我该如何处理计算?

该程序接受烘焙食品的订单 - 总数量以及代码作为输入。例如 14 个松饼。每个项目都有一组可用的软件包(例如 2、5、8),每个软件包都有其成本。我使用硬币找零算法来分解可用包中的 14 个松饼。

例如输入 = 14 个松饼

预期输出:

14 个松饼 54.8 美元

1 x 8 24.95 美元

3 x 2 9.95 美元

我已经使用硬币找零算法完成了包分解,现在我正在寻找设置 OO 设计以实现输出的最佳方法。我非常感谢对此的任何建议。

这是我从列表中获取重复项的代码:

public static void packagesprint() {
List<Integer> items = Arrays.asList(8, 2, 2, 2);

Map<Integer, Long> result = items.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

for (Map.Entry<Integer,Long> entry : result.entrySet())
System.out.println(entry.getKey() + " x "+
+ entry.getValue());
}

输出:

2x3

8x1

最佳答案

有很多可能的方法来解决这个问题。我将向您展示一些可能性。

  1. 第一种可能的方法是创建一个包含键、值和重复项数量的新对象。这是一种很好的方法,因为您在一个对象中拥有所有需要的数据。

具体实现请引用下面:

public class MyObject{
private int id;
private double value;
private int numberOfDuplicates;

public MyObject(){
this.id = 0;
this.value = 0;
this.numberOfDuplicates = 0;
}

public MyObject(int id, double value, int numberOfDuplicates){
this.id = id;
this.value = value;
this.numberOfDuplicates = numberOfDuplicates;
}

// INSERT GETTERS AND SETTERS BELOW
}

然后你将这样使用它:

public static void packagesprint() {
List<Integer> items = Arrays.asList(8, 2, 2, 2);
List<MyObject> myObjectList = ArrayList<>();

Map<Integer, Long> result = items.stream()
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

for (Map.Entry<Integer,Long> entry : result.entrySet()){
MyObject myObject = new MyObject();
myObject.setId(entry.getKey());
myObject.setNumberOfDuplicates(entry.getValue().intValue());
myObject.setValue(value); // <- this is where you set your value, e.g. if 2's value is 5.50, then set 5.50 as value
myObjectList.add(myObject);
}

}
  • 另一种可能的方法是您可以使用 HashMap 并将 2 设置为键,将“5.50”设置为值。这种方法的缺点是您仍然需要在另一个 map (在您的例子中是结果 map )中搜索重复项数量的值。
  • 具体实现请引用下面:

    public static void packagesprint() {
    List<Integer> items = Arrays.asList(8, 2, 2, 2);
    Map<Integer, Double> keyValuePairs = new HashMap<Integer, Double>();

    Map<Integer, Long> result = items.stream()
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

    for (Map.Entry<Integer,Long> entry : result.entrySet()){
    keyValuePairs.put(entry.getKey(), value) // <- this is where you set your value, e.g. if 2's value is 5.50, then set 5.50 as value
    }
    }

    关于java - 在 Java 中将值附加到列表的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55038329/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com