【发布时间】:2022-01-17 00:43:26
【问题描述】:
我的代码几乎准备好了,我只是无法解决一个简单的问题。 我想在 ArrayList 中添加标识代码和附加到它的项目。 例如,括号只是为了明确我想要做什么,它们不是代码或输出的一部分:
- 3ZU2SD34:上古卷轴(-!添加)
- 9ZU5SD54:FIFA 21(-!添加)
- 3ZU2SD34:上古卷轴(-!未添加,ID 已在列表中)
- 3ZU2SD34:最终幻想(-!未添加,ID 已在列表中)
- 4ZU8SD89:NBA 2K22(-!添加)
...等等。
我的代码如下所示:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<Item> items = new ArrayList<>();
while (true) {
System.out.println("Identifier? (empty will stop)");
String identifier = scanner.nextLine();
if (identifier.isEmpty()) {
break;
}
System.out.println("Name? (empty will stop)");
String name = scanner.nextLine();
if (name.isEmpty()) {
break;
}
/*if (!items.contains(identifier)){ This doesn't work
items.add(new Item(identifier, name));
}*/
if (!items.contains(new Item(identifier,name))) {
items.add(new Item(identifier, name)); //this works fine, but I want to skip even if only the ID is equal
}
}
System.out.println("");
System.out.println("==Items==");
for (Item lines : items) {
System.out.println(lines);
}
}
}
输出:
Identifier? (empty will stop)
1234
Name? (empty will stop)
Test1
Identifier? (empty will stop)
1234
Name? (empty will stop)
Test2
Identifier? (empty will stop)
1234
Name? (empty will stop)
Test1
Identifier? (empty will stop)
5555
Name? (empty will stop)
Test3
Identifier? (empty will stop)
==Items==
1234: Test1
1234: Test2
5555: Test3
我的代码添加了除相同项目之外的所有内容,但我希望它也跳过相同的标识。我该怎么做? 可能有这么简单的方法,但我想不通。
【问题讨论】:
-
String不是Item。因此,检查String是否包含在Items 列表中显然永远不会匹配。 -
我编辑了它,我粘贴了我的旧代码。再次检查,但我明白你的意思,我如何检查标识符是否在列表中?
-
你可以用
items.stream().anyMatch(i -> i.identifier.equals(name));代替contains