Java比较arraylist中数组的元素

时间:2019-03-01 14:13:34

标签: java arrays arraylist

我正在尝试将输入与arraylist中的值进行比较。

public compare(number)

Ex; 我有一个arraylist:

[100,1102,14051,1024, / 142,1450,15121,1482,/ 141,1912,14924,1001] // the / represents each entry

数组的每个索引代表我程序中的唯一属性。例如,索引0代表user id,索引1代表room number等。 如果我执行arraylist.get(2),它将返回第二个数组(142,1450,15121,1482)

我正在尝试将number与每个数组中的第二个元素进行比较。 假设我运行了compare(1102),我希望它遍历每个数组中的每个[1],如果该索引处有匹配项,则返回true。

因此,我希望它将'number'(1102)与每个第一个索引元素(1102,1450,1912)进行比较,并且由于1102在arraylist中,因此返回true

我一直在搜寻,却找不到实现该方法的方法,或者找不到正确的措辞

3 个答案:

答案 0 :(得分:1)

Stream API可以完成此任务。

public class MyCompare 
{
    private static Optional<Integer> compare(Integer valueToCompare)
    {
        Optional<Integer[]> matchingArray = listToCompare.stream()
                .filter(eachArray -> eachArray[1].equals(valueToCompare))
                .findFirst();

        if(matchingArray.isPresent())
        {
            for(int i = 0; i < listToCompare.size(); i++)
            {
                if(listToCompare.get(i).equals(matchingArray.get()))
                {
                    return Optional.of(i);
                }
            }
        }

        return Optional.empty();
    }

    private static List<Integer[]> listToCompare = new ArrayList<>();

    public static void main(String[] args)
    {
        listToCompare.add(new Integer[] { 100, 1102, 14051, 1024 });
        listToCompare.add(new Integer[] { 142, 1450, 15121, 1482 });
        listToCompare.add(new Integer[] { 141, 1912, 14924, 1001 });

        Optional<Integer> listIndex = compare(1102);
        if(listIndex.isPresent())
        {
            System.out.println("Match found in list index " + listIndex.get());
        }
        else
        {
            System.out.println("No match found");
        }
    }
}

在列表索引0中找到匹配项

答案 1 :(得分:0)

直接方法是使用增强的for循环:

for (int[] items : list) {
    // do your checking in here
}

更高级但更优雅的方法是使用流:

list.stream()       // converts the list into a Stream.
    .flatMap(...)   // can map each array in the list to its nth element.
    .anyMatch(...); // returns true if any value in the stream matches the Predicate passed.

流API:https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html

答案 2 :(得分:0)

遍历您的列表并比较第二个元素:

public static boolean compare (int number){
    for( int i = 0; i<arraylist.size(); i++){
         if(number == arraylist.get(i)[1]){
            return true;
          }
     }
    return false;
 }