Hi Tagir, ----- Mail original ----- > De: "Tagir Valeev" <amae...@gmail.com> > À: "amber-spec-experts" <amber-spec-experts@openjdk.java.net> > Envoyé: Lundi 4 Mars 2019 04:30:09 > Objet: Patterns for arrays of specific length
> Hello! > > In intellij IDEA code we often see snippets like this: > > final ResolveResult[] resolveResults = multiResolve(false); > return resolveResults.length == 1 && resolveResults[0].isValidResult() ? > resolveResults[0].getElement() : null; Arrays.stream(resolveResults).findFirst().filter(ResolveResult::isValidResult).map(ResolveResult::getElement).orElse(null) and obviously, the method should return an Optional instead of calling orElse(null) at the end. Rémi > > I wonder if special kind of patterns to cover such case could be invented like > > return multiResolve(false) instanceof ResolveResult[] {var res} && > res.isValidResult() ? > res.getElement() : null; > > In essence it should be a deconstruction pattern for arrays. I don't > remember whether it was discussed, but probably I'm missing something. > > Alternatively this could be covered by utility method like > > static <T> T getOnlyElement(T[] array) { > return array.length == 1 ? array[0] : null; > } > > return getOnlyElement(multiResolve(false)) instanceof ResolveResult > res && res.isValidResult() ? > res.getElement() : null; > > But this doesn't scale for arrays of bigger length. > > With best regards, > Tagir Valeev.