Какой способ наиболее эффективен для обработки отдельной и отсортированной коллекции?
1. Улучшенный цикл с TreeSet
Set<MyObj> ret = new TreeSet<>();
for (Foo foo : foos)
ret.add(new MyObj(foo));
2. Простой поток
List<MyObj> ret = foos.stream().map(MyObj::new)
.distinct().sorted()
.collect(Collectors.toList());
3. поток TreeSet
Set<MyObj> ret = foos.stream().map(MyObj::new)
.collect(Collectors.toCollection(TreeSet::new));
Первый способ кажется наименее элегантным, но легко читаемым.
Второй способ заставляет меня опасаться, что distinct
и sorted
будут обрабатывать поток два раза.
Последний способ чувствует себя хорошо, но что такое служебные данные TreeSet в потоке?
Любые подсказки? Спасибо.