У меня есть коллекция из 10000 объектов, которые имеют два свойства: string
и string[]
class Product
{
String name;
String[] aliases;
}
Каждый объект занимает примерно 64 байта, поэтому мы смотрим на мегабайт впамять для всей коллекции, которая кажется управляемой Android для поиска в памяти.
Я хочу получить точное совпадение либо с одной строкой, либо с любой строкой в массиве, а затем вернуть свойство name
объект.
Однако у android есть некоторые ограничения на Lambdas и .stream()
, которые исключают многие популярные поисковые решения, не заставляя пользователей иметь ОС 7.0 или выше, что исключает примерно треть пользователей.Я бы хотел этого избежать.
В настоящее время работает следующий код, но он выглядит ужасно, учитывая некоторые варианты, которые я видел, которые используют потоки и лямбды.
public String isProductOrAlias(String lowertext) {
//products is instantiated in the parent class
//as a List<Product> loaded into memory from a local file
try {
for (Product p: products) {
if(lowertext.equals(p.name.toLowerCase()))
return p.name;
if(p.aliases != null) {
for (String s: p.aliases) {
if(lowertext.equals(s.toLowerCase()))
return p.name;
}
}
}
} catch (Exception ex) {
return "";
}
return "";
}
Как лучше всего достичь той же цели, учитывая ограничения окружающей среды?В идеале мы хотели бы сохранить minSDK до 23 (6.0) и выше.