gpt4 book ai didi

java - 从 ArrayList 中删除重复的对象

转载 作者:行者123 更新时间:2023-11-29 06:59:04 25 4
gpt4 key购买 nike

我创建了一个模拟餐厅账单的程序,它包含两个类,Diner 和 Food Item。

项目类别:

package dinersbill;

public class Item {

private String name;
private double price;
private int buyerCount = 0;

public Item(String name, double price) {
this.name = name;
this.price = price;
}

public String getName() {
return name;
}

public double getPrice() {
return price;
}

public int getBuyerCount() {
return buyerCount;
}

public void incrementBuyerCount() {
buyerCount += 1;
}

}

晚餐类:

package dinersbill;

import java.util.ArrayList;

public class Diner {

private String name;
private ArrayList<Item> itemList = new ArrayList<Item>();

public Diner(String name) {
this.name = name;
}

public String getName() {
return name;
}

public ArrayList<Item> getItemList() {
return itemList;
}

public void addItem(Item foodItem) {
itemList.add(foodItem);
foodItem.incrementBuyerCount();
}

public double getPrice() {
double total = 0;
for(Item item : itemList) {
total += item.getPrice() / item.getBuyerCount();
}
return total;
}

}

Diner 类包含 Item 对象的 ArrayList,因为一个 Diner 可以购买多个 Items。最后,我有一个包含 Diner 对象的 ArrayList 的顶级类:

package dinersbill;

import java.util.ArrayList;

public class DinerList {

private ArrayList<Diner> diners = new ArrayList<Diner>();

public DinerList(ArrayList<Diner> diners) {
this.diners = diners;
}

public ArrayList<Item> getDinerItems() {
ArrayList<Item> itemList = new ArrayList<>();
for(Diner d : diners) {
for(Item i : d.getItemList()) itemList.add(i);
}
return itemList;
}

}

我该如何改变 DinerList 中的 getDinerItems 方法,使其只返回出现一次的对象?我对在此列表中出现多次的项目有疑问,因为多个食客可能会购买一个项目。

例如:

private static DinerList diners = new DinerList(dinerList);

public static void main(String[] args) {
Diner diner1 = new Diner("John");
Diner diner2 = new Diner("Tom");

dinerList.add(diner1);
dinerList.add(diner2);

Item item1 = new Item("Pizza", 5);
Item item2 = new Item("Icecream", 10);

diner1.addItem(item1);
diner2.addItem(item1);
diner2.addItem(item2);

for(Item i : diners.getDinerItems()) {
System.out.println(i.getName());
}


}

实际输出:

披萨冰淇淋披萨

我想要的输出:

披萨冰淇淋

最佳答案

使用Set ( HashSet Implementation ) 而不是旨在避免重复元素的 arraylist

关于java - 从 ArrayList 中删除重复的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29182814/

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