[英]One type of item in list
我正在尝试检查列表中的项目类型是否已满。
private LinkedList<Item> items = new LinkedList<>();
items.add(new Item("Movie1", "2020", "2"));//2 right there's the amount
items.add(new Item("Movie2", "2012", "3"));
items.add(new Item("Movie3", "2011", "3"));
items.add(new Item("Movie4", "2013", "3"));
我限制为 3。因此,如果数量为 3,则已满。
当我说 3 是 Movie2,2020, 3
中的数量时。 我是说那三个。 误会请见谅。
我只知道如何检查其中一项是否已满。 但是有多个是满的。
我很难检查它们。
任何人都可以帮忙吗?
谢谢。
定义一个方法如下向列表中添加元素:
static void add(LinkedList<Item> items, Item item) {
boolean full = false;
for (Item e : items) {
if (e.equals(item) && e.getId().equals(String.valueOf(LIMIT)) && Integer.valueOf(item.getId()) >= LIMIT) {
full = true;
}
}
if (full) {
System.out.println("There is no room for " + item + " in the list");
} else {
items.add(item);
}
}
演示:
import java.util.LinkedList;
import java.util.Objects;
class Item {
String name, year, id;
public Item(String name, String year, String id) {
this.name = name;
this.year = year;
this.id = id;
}
public String getName() {
return name;
}
public String getYear() {
return year;
}
public String getId() {
return id;
}
@Override
public int hashCode() {
return Objects.hash(name, year);
}
@Override
public boolean equals(Object obj) {
Item other = (Item) obj;
return this.name.equals(other.name) && this.year.equals(other.year);
}
@Override
public String toString() {
return "[Name: " + name + ", Year: " + year + ", ID: " + id + "]";
}
}
public class Main {
final static int LIMIT = 3;
public static void main(String[] args) {
LinkedList<Item> items = new LinkedList<Item>();
add(items, new Item("Movie1", "2010", "1"));
add(items, new Item("Movie1", "2010", "2"));
add(items, new Item("Movie1", "2010", "3"));
add(items, new Item("Movie1", "2010", "3"));
add(items, new Item("Movie1", "2010", "4"));
add(items, new Item("Movie2", "2020", "2"));
items.stream().forEach(System.out::println);
}
static void add(LinkedList<Item> items, Item item) {
boolean full = false;
for (Item e : items) {
if (e.equals(item) && e.getId().equals(String.valueOf(LIMIT)) && Integer.valueOf(item.getId()) >= LIMIT) {
full = true;
}
}
if (full) {
System.out.println("There is no room for " + item + " in the list");
} else {
items.add(item);
}
}
}
Output:
There is no room for [Name: Movie1, Year: 2010, ID: 3] in the list
There is no room for [Name: Movie1, Year: 2010, ID: 4] in the list
[Name: Movie1, Year: 2010, ID: 1]
[Name: Movie1, Year: 2010, ID: 2]
[Name: Movie1, Year: 2010, ID: 3]
[Name: Movie2, Year: 2020, ID: 2]
注意:此解决方案基于id
字段不作为equals()
的一部分计算的要求,即如果两个项目的name
和year
相等,则它们相等。
@Override
public int hashCode() {
return Objects.hash(name, year);
}
@Override
public boolean equals(Object obj) {
Item other = (Item) obj;
return this.name.equals(other.name) && this.year.equals(other.year);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.