簡體   English   中英

列表中的一種類型的項目

[英]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()的一部分計算的要求,即如果兩個項目的nameyear相等,則它們相等。

@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM