检查arraylist是否仅具有预定义值范围内的值

时间:2018-11-10 17:06:23

标签: java arraylist

我有一个arraylist,它的String值也可以重复,那里没有问题。 另外,我有一个允许的值的预定义范围/选项。一个具有允许值的arraylist,但是如果解决了我的问题,我可以使用任何数据结构。

我只需要一种方法来确保我的arraylist没有外来值,如果是的话,它会指出有错误的索引号或有多个错误的数字。

我已经尝试过.contains()方法和许多其他方法,但是我无法获得错误的索引位置。

我准备使用任何数据结构或任何方法,但需要该FAULTY INDEX NUMBER。

仅供参考,我正在使用Java,并且arraylist具有ResultSet中的值。

3 个答案:

答案 0 :(得分:1)

我同意,事情总是有一种更好的方法,但是我以某种方式解决了这一问题(请忽略此方法,因为答案正是我想要的)。

我有2个数组列表A和B,我想知道A(允许+错误值)中的哪个元素不在B(允许值)中,并且大多数 重要在哪个位置。

我所做的是:

->制作一个数组列表A_temp,即A的副本(与A相同的元素)。

->二手A.removeAll(B)。
 这使我的A仅包含错误值(这是我要指向的错误值)。

->最后,我打印出A_temp.indexOf(A.get(index))。

答案 1 :(得分:0)

您可能可以使用set执行此任务(基于带字符串的注释示例):

List <String> all = ...
Set <String> allowed = ..

for(String current : all){
   if(!allowed.contains(current){
      // out of range
   }
}

这种方法比利用一组数据结构中的优化搜索线性地迭代两个列表的方法要快。

答案 2 :(得分:0)

这可能就是您想要的。这可能不是执行此操作的最佳方法,但是您可以从中获得一些想法

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class A {

    public static void main(String[] args) {
        List<String> valuesList = Arrays.asList("aa", "bb", "bb", "bb", "cc", "dd", "ee", "ff", "gg");
        List<String> correctValues = Arrays.asList("bb", "dd", "ff");

        List wrongPositions = getPositions(valuesList, correctValues);
    }

    static List getPositions(List<String> values, List<String> correctValues) {

        List<Integer> numbers = new ArrayList<>();
        for (int i = 0; i < values.size(); i++) {
            numbers.add(i);
        }

        List<Integer> correctPositions = new ArrayList<>();

        for (String correctValue : correctValues) {
            while (values.indexOf(correctValue) > -1) {
                correctPositions.add(values.indexOf(correctValue));
                values.set(values.indexOf(correctValue), "SomeValueNotContainingInList");
            }
        }

        numbers.removeAll(correctPositions);
        return numbers;
    }
}