急求!怎么这做判断啊 不相等 retrun老是返回正确的

怎么判断这个list里面的值是否在另一个list里面存在 存在的话返回true 返回到这个方法里面
不存在的话不做处理

            public class LegalityImpl implements Legality {

@Autowired
private RedisTools redisTools;


@Override
public boolean verify(String msg) {
    int start = msg.indexOf("MN"); // 获取第一次/出现的位置
    int end = msg.lastIndexOf(";CP"); // 获取最后一次.出现的位置
    String result = msg.substring(start, end).replace("MN=", " ");
    result=result.replace(" ","");
    List<String>results=Arrays.asList(result);
    List<String> list = redisTools.getDeviceCodeList();
    for (int i = 0; i < list.size(); i++) {
        if(!list.get(i).equals(results.get(0))){
            return false;
        }
    }
        return true;
}




public interface Legality {
/**
 * 验证设备合法性
 * 
 * @param msg
 * @return
 */
boolean verify(String msg);

}

public class ParserImpl implements Parser {

private static final Logger LOG = LoggerFactory.getLogger(ParserImpl.class);

@Autowired
private Legality legality;

@Override
public void parse(String msg) {

    // 1. 验证设备合法性
    if (!this.verify(msg)) {
        return  ;
    }
        private boolean verify(String msg) {
    return this.legality.verify(msg);
}

其中result的值为399HOLL0000219

看了你的代码的逻辑,result集合第一个元素和list比较,只要触发不相等的,就直接返回;【这样的话,没有把集合元素全部比较】

而你提问的问题,是想result集合的第一个元素,和list全部比较完毕后,不存在返回false,否则返回true;

那么你的代码逻辑需要调整;,可以反过来,只要有相等的,返回true,外面return false;

不知道我理解的,是否是你需要的

 for (int i = 0; i < list.size(); i++) {
        if(!list.get(i).equals(results.get(0))){
            return false;
        }else{
                   return true;
                }
    }


 public boolean verify(String msg) {
        int start = msg.indexOf("MN"); // 获取第一次/出现的位置
        int end = msg.lastIndexOf(";CP"); // 获取最后一次.出现的位置
        String result = msg.substring(start, end).replace("MN=", " ");
        result = result.replace(" ","");

        //List<String>results=Arrays.asList(result); 看你的代码这一步是无用的,下面直接用result就行了

        List<String> list = redisTools.getDeviceCodeList();
        for (int i = 0; i < list.size(); i++) {
            if(list.get(i).equals(result)){
                //如果list中有一个和result相同,则是合法的,返回true
                return true;
            }
        }
        //否则返回false,代表list中没有一个和result相同
        return false;
    }

请问楼主 是不是这个意思?

 for (int i = 0; i < list.size(); i++) {
        if(!list.get(i).equals(results.get(0))){
            continue;
        }else{
            return true;
        }
    }

如果需要遍历完所有元素也未找到相等的值时不做返回,可在方法最后抛出异常

 throw new RuntimeException;

contains方法判断列表中是否包含某个对象

 for (int i=0; i<list.size(); i++) {
    if (results.contains(list.get(i))) {
            return true;
        }
 }
 return false;

首先 你判断逻辑有问题,你为何把string result转换成 list results,其实你用list.get(i).equals(result)也是一样的,再次,不用你亲自for循环,你可以用list.contains(results.get(0)),包含就是true,else 就是false,
还有看你上面说的会跳转到return this.legality.verify(msg); 那说明你的程序进入 了public void parse(String msg) {
// 1. 验证设备合法性
if (!this.verify(msg)) {
return ;
}
private boolean verify(String msg) {
return this.legality.verify(msg);
}
这个函数,而我看到的这里面的this.verify跟public boolean verify(String msg)并不是同一个函数吧,并不在同一个类中,你看看是不是还有另一个地方调用了你展示出来的verify

你这一段代码写的我不知道该怎么说才好,感觉代码写的很水,建议写代码的时候多想想,提高一下质量。
我简单举几个例子:
int start = msg.indexOf("MN"); // 获取第一次/出现的位置
int end = msg.lastIndexOf(";CP"); // 获取最后一次.出现的位置
String result = msg.substring(start, end).replace("MN=", " ");
result=result.replace(" ","");
上面这四行完全可以合并为一行;

    List<String>results=Arrays.asList(result);

上面这一行转List完全没有意义;

    for (int i = 0; i < list.size(); i++) {

上面这一行完全可以用foreach或者lambda表达式代替,java8以后的特性,建议多使用,提高代码简洁渡;

    if(!list.get(i).equals(results.get(0))){

上面这一行完全可以用contains代替。

至于你的疑问,为什么总是返回true呢,你把List list = redisTools.getDeviceCodeList();这个List中的内容打印出来看一下就明白了。

public boolean verify(String msg) {
int start = msg.indexOf("MN"); // 获取第一次/出现的位置
int end = msg.lastIndexOf(";CP"); // 获取最后一次.出现的位置
String result = msg.substring(start, end).replace("MN=", " ");
result=result.replace(" ","");
Listresults=Arrays.asList(result);
List list = redisTools.getDeviceCodeList();
for (int i = 0; i < list.size(); i++) {
for(int j=0;j<results.size();j++){
if(list[i]==results[j]){
return false;
}
}
}
}