1df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin/* 2df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * Copyright (C) 2014 The Android Open Source Project 3df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * 4df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 5df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * you may not use this file except in compliance with the License. 6df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * You may obtain a copy of the License at 7df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * 8df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 9df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * 10df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * Unless required by applicable law or agreed to in writing, software 11df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 12df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * See the License for the specific language governing permissions and 14df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * limitations under the License. 15df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin */ 16df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 17df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkinpackage android.hardware.camera2.utils; 18df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 19df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkinimport java.util.List; 20df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 21df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin/** 22df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * Various assortment of list utilities. 23df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * 24df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * <p>Using a {@code null} list is supported and will almost always return the default value 25df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * (e.g. {@code false}, or {@code null}).</p> 26df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin */ 27df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkinpublic class ListUtils { 28df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 29df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin /** Return {@code} true if the {@code list} contains the {@code needle}. */ 30df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin public static <T> boolean listContains(List<T> list, T needle) { 31df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin if (list == null) { 32df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin return false; 33df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } else { 34df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin return list.contains(needle); 35df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 36df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 37df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 38df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin /** 39df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * Return {@code true} if the {@code list} is only a single element equal to 40df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * {@code single}. 41df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin */ 42df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin public static <T> boolean listElementsEqualTo(List<T> list, T single) { 43df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin if (list == null) { 44df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin return false; 45df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 46df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 47df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin return (list.size() == 1 && list.contains(single)); 48df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 49df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 50df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin /** 51df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * Return a human-readable representation of a list (non-recursively). 52df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin */ 53df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin public static <T> String listToString(List<T> list) { 54df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin if (list == null) { 55df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin return null; 56df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 57df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 58df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin StringBuilder sb = new StringBuilder(); 59df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin sb.append('['); 60df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 61df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin int size = list.size(); 62df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin int i = 0; 63df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin for (T elem : list) { 64df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin sb.append(elem); 65df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 66df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin if (i != size - 1) { 67df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin sb.append(','); 68df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 69df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin i++; 70df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 71df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin sb.append(']'); 72df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 73df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin return sb.toString(); 74df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 75df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 76df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin /** 77df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * Return the first item from {@code choices} that is contained in the {@code list}. 78df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * 79df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * <p>Choices with an index closer to 0 get higher priority. If none of the {@code choices} 80df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * are in the {@code list}, then {@code null} is returned. 81df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * 82df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * @param list a list of objects which may or may not contain one or more of the choices 83df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * @param choices an array of objects which should be used to select an item from 84df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * 85df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin * @return the first item from {@code choices} contained in {@code list}, otherwise {@code null} 86df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin */ 87df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin public static <T> T listSelectFirstFrom(List<T> list, T[] choices) { 88df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin if (list == null) { 89df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin return null; 90df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 91df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 92df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin for (T choice : choices) { 93df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin if (list.contains(choice)) { 94df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin return choice; 95df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 96df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 97df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 98df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin return null; 99df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 100df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin 101df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin private ListUtils() { 102df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin throw new AssertionError(); 103df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin } 104df6242e374b81e802a38cb891477f05d3e4b3cbcIgor Murashkin} 105