Учитывая Ваши ограничения, Вы застреваете с поиском грубой силы (или создание индекса, если поиск будет повторен). Можно ли разработать кого-либо о том, как эти ArrayList
сгенерирован - возможно, там существует некоторое пространство для маневра.
, Если все Вы ищете, более симпатичный код, рассмотрите использование Apache классы Наборов палаты общин, в особенности CollectionUtils.find () , для готового синтаксического сахара:
ArrayList haystack = // ...
final Object needleField1 = // ...
final Object needleField2 = // ...
Object found = CollectionUtils.find(haystack, new Predicate() {
public boolean evaluate(Object input) {
return needleField1.equals(input.field1) &&
needleField2.equals(input.field2);
}
});
С используйте диагностику
, вы получите полезное сообщение:
Warning: Use of "shift" without parentheses is ambiguous at (eval 9)[/usr/lib/perl5/5.8/perl5db.pl:628] line 2 (#1) (S ambiguous) You wrote a unary operator followed by something that looks like a binary operator that could also have been interpreted as a term or unary operator. For instance, if you know that the rand function has a default argument of 1.0, and you write rand + 5; you may THINK you wrote the same thing as rand() + 5; but in actual fact, you got rand(+5); So put in parentheses to say what you really mean.
Есть опасения, что вы могли бы написать что-то вроде shift .5
, и это будет анализируется как shift (0.5)
.
Неоднозначный не означает действительно неоднозначный, просто неоднозначный, насколько определил синтаксический анализатор.
сдвиг.
в частности "неоднозначен", потому что .
может начинать термин (например, .123
) или оператор,
поэтому он не знает достаточно, чтобы решить, является ли то, что следует ниже, операндом shift или оператором, для которого shift () является операндом (а синтаксический анализатор недостаточно умен, чтобы знать, что: a) .
не является началом такого члена или б) .123
не является допустимым операндом для сдвига).