Один тип элемента в списке - PullRequest
1 голос
/ 06 мая 2020
• 1000

когда я говорю, что три - это сумма в Movie2, 2020, 3. Я имею в виду эти три. Извините за недоразумение.

Я знаю только, как проверить, полон ли один из предметов. Но есть несколько заполненных.

Я изо всех сил пытаюсь их проверить.

Кто-нибудь может помочь?

Спасибо.

1 Ответ

0 голосов
/ 06 мая 2020

Определите следующий метод для добавления элементов в список:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...