Je peux penser à deux façons:
public static IntStream foo(List<Integer> list)
{
return list.stream().mapToInt(Integer::valueOf);
}
public static IntStream bar(List<Integer> list)
{
return list.stream().mapToInt(x -> x);
}
Quelle est la voie idiomatique? Peut-être qu'il existe déjà une fonction de bibliothèque qui fait exactement ce que je veux?
Je suppose (ou du moins c'est une alternative) de cette façon est plus performante:
public static IntStream baz(List<Integer> list)
{
return list.stream().mapToInt(Integer::intValue);
}
puisque la fonction Integer::intValue
est entièrement compatible avec ToIntFunction
car il prend un Integer
et retourne un int
. Non autoboxing est effectué.
Je cherchais également un équivalent de Function::identity
, j'espérais écrire un équivalent de votre méthode bar
:
public static IntStream qux(List<Integer> list)
{
return list.stream().mapToInt(IntFunction::identity);
}
mais ils n'ont pas fourni cette méthode identity
. Je ne sais pas pourquoi.
Une autre façon de transformer ce serait d'utiliser Stream.flatMapToInt
et IntStream.of
comme:
public static IntStream foobar(List<Integer> list) {
return list.stream().flatMapToInt(IntStream::of);
}
Remarque : J'ai parcouru quelques questions liées avant de poster ici et je n'ai tout simplement pas trouvé cela suggéré.