Определите следующий метод для добавления элементов в список:
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);
}
}
}
Вывод:
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);
}