我正在尝试查找列表中是否包含字符串。我有一个列表对象,如下所示:
请注意,这只是示例代码,以说明我的观点/问题!
import java.util.List;
public class FilterByList {
private String actionHero;
private String actionHero2;
private String move;
private int number;
private String actionHero3;
public FilterByList(String actionHero, String actionHero2, String move, int number, String actionHero3) {
this.actionHero = actionHero;
this.actionHero2 = actionHero2;
this.move = move;
this.number = number;
this.actionHero3 = actionHero3;
}
public String getActionHero() {
return actionHero;
}
public void setActionHero(String actionHero) {
this.actionHero = actionHero;
}
public String getActionHero2() {
return actionHero2;
}
public void setActionHero2(String actionHero2) {
this.actionHero2 = actionHero2;
}
public String getMove() {
return move;
}
public void setMove(String move) {
this.move = move;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getActionHero3() {
return actionHero3;
}
public void setActionHero3(String actionHero3) {
this.actionHero3 = actionHero3;
}
}
然后:
public static void main(String[] args) {
List<FilterByList> myList = Collections.singletonList(
new FilterByList("superman", "antman", "ACTION", 123, "batman"));
System.out.println(myList);
if (myList.contains("batman")) {
System.out.println("found it!");
} else {
System.out.println("************************* Did not find anything!!1");
}
}
在列表对象中找不到batman
。因此,打印内容如下:
[com.company.FilterByList@7577b641]
************************* Did not find anything!!1
任何想法我怎么做:
a)打印列表的内容?
b)用尽可能少的代码找到列表中的元素?
感谢您的帮助。 请使用我的代码上下文回答,因为它会给我更多的指针。
答案 0 :(得分:1)
您在List<FilterByList>
上运行包含,并且该列表没有字符串batman
它具有FilterByList的实例,成员之一是字符串类型和值'batman
'
根据您的代码。您创建对象FilterByList的实例,然后尝试将该对象与String
行
if (myList.contains("batman")) {
那些对象是不同的类型,这就是为什么没有找到它的原因
要检查是否有蝙蝠侠,可以使用Stream API
boolean d = myList.stream().map(FilterByList::getActionHero3).anyMatch(hero3 -> hero3.equals("batman"));
答案 1 :(得分:1)
添加到FilterByList类containsHero(String hero)
中,在其中您将hero
与3个英雄中的每个英雄进行比较。您无需将此单个对象存储在List中。只需使用它即可。
FilterByList f = new FilterByList("superman", "antman", "ACTION", 123, "batman");
if (f.containsHero("batman")) {
System.out.println("found it!");
} else {
System.out.println("************************* Did not find anything!!1");
}
P.S。恕我直言,您试图做的所有事情看起来都很奇怪...
答案 2 :(得分:1)
我在类中添加了一种新的搜索方法
docker exec -it cntainerID /bin/bash
然后将其用于这样的流
public boolean containsHero(String hero) {
return actionHero.equals(hero) || actionHero2.equals(hero) || actionHero3.equals(hero);
}
要获取您的类的可读输出,您可以覆盖if (myList.stream().anyMatch(f -> f.containsHero("batman"))) {
System.out.println("found it!");
}
方法,这是一个示例
toString()
然后执行@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append(actionHero);
builder.append(", ");
builder.append(actionHero2);
builder.append(", ");
builder.append(actionHero3);
builder.append(": ");
builder.append(move);
builder.append(": ");
builder.append(number);
return builder.toString();
}
输出
[超人,蚂蚁,蝙蝠侠:动作:123]
答案 3 :(得分:0)
您可以将两种不同类型的对象放入列表中,例如crossprod(table(dat))
和String
,如果您愿意omit the generic type,则隐含的是Integer
,例如:
List<Object> myList = new ArrayList<Object>();
但这不是使用集合的好方法。当然,这取决于您的特定任务,但是我建议您使用不同类型的不同集合。
如果您想完全实现所要的内容,可以使用Stream API,如下所示:
List myList = new ArrayList();
myList.add("superman");
myList.add("antman");
myList.add("ACTION");
myList.add(123);
myList.add("batman");
System.out.println(myList);
if (myList.contains("batman")) {
System.out.println("found it!");
} else {
System.out.println("************************* Did not find anything!!1");
}
如果集合中有多个元素,则更优选使用 List<FilterByList> myList = Collections.singletonList(
new FilterByList("superman", "antman", "ACTION", 123, "batman"));
System.out.println(myList);
if (myList.stream().map(FilterByList::getActionHero3).allMatch("batman"::equals)) {
System.out.println("found it!");
} else {
System.out.println("************************* Did not find anything!!1");
}
方法:
anyMatch