繁体   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