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

我有一个数组列表,它的字符串值也可能重复,那里没有问题。此外,我有这些值的预定义范围/选项,这是允许的。具有允许值的数组列表,但如果我的问题得到解决,我可以使用任何数据结构。

我只需要一种方法来确保我的arraylist 没有外来值,如果是这样,它会指出哪个索引号如果有故障,或者如果有多个则有故障。

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

我准备好使用任何数据结构或任何方法,但需要那个错误索引号。

仅供参考,我正在使用 java 并且 arraylist 具有来自 ResultSet 的值。


catspeake
浏览 116回答 3
3回答

蓝山帝景

我同意总有更好的解决方法,但我以某种方式解决了这个问题(请忽略方法,因为答案正是我想要的)。我有 2 个数组列表 A 和 B,我想知道 A(允许 + 错误值)的哪个元素不在 B(允许值)中,最 重要的是在哪个位置。我所做的是:--> 制作了一个数组列表 A_temp 即 A 的副本。(与 A 相同的元素)。--> 使用 A.removeAll(B)。这使我的 A 只包含错误值(这是我想要指出的)。--> 最后,我打印出 A_temp.indexOf(A.get(index))。

犯罪嫌疑人X

这可能是你想要的。它可能不是执行此操作的优化方式,但您可以从中获得一些想法import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class A {&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; List<String> valuesList = Arrays.asList("aa", "bb", "bb", "bb", "cc", "dd", "ee", "ff", "gg");&nbsp; &nbsp; &nbsp; &nbsp; List<String> correctValues = Arrays.asList("bb", "dd", "ff");&nbsp; &nbsp; &nbsp; &nbsp; List wrongPositions = getPositions(valuesList, correctValues);&nbsp; &nbsp; }&nbsp; &nbsp; static List getPositions(List<String> values, List<String> correctValues) {&nbsp; &nbsp; &nbsp; &nbsp; List<Integer> numbers = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; for (int i = 0; i < values.size(); i++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numbers.add(i);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; List<Integer> correctPositions = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; for (String correctValue : correctValues) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; while (values.indexOf(correctValue) > -1) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; correctPositions.add(values.indexOf(correctValue));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; values.set(values.indexOf(correctValue), "SomeValueNotContainingInList");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; numbers.removeAll(correctPositions);&nbsp; &nbsp; &nbsp; &nbsp; return numbers;&nbsp; &nbsp; }}

呼唤远方

您可能可以使用 set 执行此任务(基于您的带有字符串的评论示例):List <String> all = ...Set <String> allowed = ..for(String current : all){&nbsp; &nbsp;if(!allowed.contains(current){&nbsp; &nbsp; &nbsp; // out of range&nbsp; &nbsp;}}这种方法比利用一组数据结构中的优化搜索线性迭代两个列表的方法更快。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java