gpt4 book ai didi

Java LSt 默认和修改列表

转载 作者:太空宇宙 更新时间:2023-11-04 07:23:29 26 4
gpt4 key购买 nike

我从数据库成分中获取一个列表,然后创建一个新列表 somelist = inredinets。我使用 Convert(somelist) 转换 somelist 的一些值。这正在改变两个列表。有没有办法保留原来的成分表?也许,我做错了什么。我应该从数据库中获取第二个列表吗?

    List <Ingredient> somelist = new ArrayList<>();
somelist = ingredients;

convert.showImperial(somelist);


public List<Ingredient> showImperial(List<Ingredient> ingredients) {


for (int i = 0; i < ingredients.size(); i++) {
switch (ingredients.get(i).getMeasurement()) {
case GRAMS: {
Double value = ingredients.get(i).getValue();

if (value >= 453.59237) {
value = value / 453.59237;
BigDecimal rounded = new BigDecimal(value);
rounded=rounded.setScale(2, RoundingMode.HALF_DOWN);
ingredients.get(i).setValue((rounded.doubleValue())); //to pound
ingredients.get(i).setMeasurement(POUNDS);
} else {
value = value * 16 / 453.59237; //to oz;
System.out.println(value);
BigDecimal rounded = new BigDecimal(value);
rounded = rounded.setScale(1, RoundingMode.HALF_DOWN);
// System.out.println(rounded);
// System.out.println(rounded.doubleValue());
ingredients.get(i).setValue(rounded.doubleValue());
ingredients.get(i).setMeasurement(OUNCE);
}
break;
}
case ML: {
double value = ingredients.get(i).getValue();
ingredients.get(i).setValue(value / 240);
ingredients.get(i).setMeasurement(CUP); //to cup
break;
}
default: {
break;
}
}
}
return ingredients;
}

最佳答案

这一行:

somelist = ingredients;

不是复制ingredients,而是将somelist设置为与ingredients相同。

您只需将 ingredients 中的所有元素添加到 somelist 即可:

somelist.addAll(ingredients);

...但您似乎也在修改这些内容,并且 List 保存对元素的引用,而不是实际元素。因此,您需要更进一步,更深层次地复制:

for (Ingredient ingr : ingredients) {
somelist.add(new Ingredient(ingr)); // or use whatever constructor is appropriate.
}

关于Java LSt 默认和修改列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938492/

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