JAVA List中怎么判断是否含有某个字符(已试过contain()不行)

Goods goods1=new Goods("001","苹果",8.8);
Goods goods2=new Goods("002","桃子",6);
List goodsList=new ArrayList();
goodsList.add(goods1);
goodsList.add(goods2);

我想输入一个编号,判断它是否是List中的。比如输入001,返回true,输入007,返回false。

写作业不会写。。。。。求助大神门= =

你这个作业我觉得是想要你用map吧,把001作为键,goods对象作为值。

goodsList.stream().filter(i-> "001".equals(i.getName())).collect(Collectors.toList());

首先说,,用 contains(),,,,是对的,看下源码。

public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }

public int indexOf(Object o) {
        if (o == null) {
            for (int i = 0; i < size; i++)
                if (elementData[i]==null)
                    return i;
        } else {
            for (int i = 0; i < size; i++)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;
    }

比较两个对象是通过equals方法进行比较的,,你需要重写你那个Goods的equals方法。

至于怎么重写,,,不会还可以追问,,对你有帮助,,请采纳 ^.^。

很明显 List里的goods是对象,如果你没有重写对象里的equals方法,那么你调用list的contains方法是,
他会比较两对象之间的地址信息(这么超类的逻辑),
所以:
1、 你如果打算用contains,那么你就要写goods的equals方法。看你的业务逻辑你的equals方法只要比较goods编号就行。
2、可以用另一种方式用contains:你可以再写一个list存编号,这个list与你的goods的list的数据要同进同出,然后存编号的list就用contains就可以了。
3、当然也可以用map做,key就是编号了。
4、最低效的是:每次判断是 List 做遍历,list.get(i).get编号().equals(你的goods.get编号())【相信你懂】

public class WdgTest
{
public static void main(String [] args){
Goods goods1=new Goods("001","苹果",8.8);
Goods goods2=new Goods("002","桃子",6);
List goodsList=new ArrayList();
goodsList.add(goods1);
goodsList.add(goods2);
@SuppressWarnings("resource")
Scanner sc=new Scanner(System.in);
boolean b1=false;
while(true){
System.out.println("请输入商品的序号:");
String goodIndex=sc.nextLine();
for(int i=0;i<goodsList.size();i++){
if(goodsList.get(i).getIndex().equals(goodIndex)){
b1=true;
i=goodsList.size();
}
}
System.out.println(b1);
b1=false;
}

}
}
class Goods{
private String index;
private String name;
private double price;
public Goods(String index, String name, double price) {
super();
this.index = index;
this.name = name;
this.price = price;
}
public String getIndex() {
return index;
}
}
最低效的做法

如楼上所说,最简单的办法,重写Goods的equals方法。如下所示:

public class Goods {
private String num;
private String name;
private String price;

    public Goods(String num, String name, String price) {
        this.num = num;
        this.name = name;
        this.price = price;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    @Override
    public boolean equals(Object o) {
        if (null == o)
            return false;
        Goods goods = (Goods) o;
        if (this.num.equals(goods.getNum())) {
            return true;
        }
        return false;
    }
}