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;
}
}