尝试查找Java列表对象是否具有元素STRING或INT?

时间:2018-12-28 13:55:01

标签: java arrays list

我正在尝试查找列表中是否包含字符串。我有一个列表对象,如下所示:

请注意,这只是示例代码,以说明我的观点/问题!

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)用尽可能少的代码找到列表中的元素?

感谢您的帮助。 请使用我的代码上下文回答,因为它会给我更多的指针。

4 个答案:

答案 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