Если вы открыты для использования сторонней библиотеки, есть несколько интересных вариантов, которые вы можете использовать с Eclipse Collections.
Если вы используете ArrayList
, как вы его выше, вы можете использовать утилиту LazyIterate
следующим образом:
int count = LazyIterate.collect(custNames, String::toLowerCase)
.countWith(String::startsWith, nameStarts.toLowerCase());
Assert.assertEquals(2, count);
Если вы используете замены Eclipse, Коллекции для ArrayList
, вы можете использовать богатые функциональные протоколы, доступные непосредственно на MutableList
:
MutableList<String> custNames =
Lists.mutable.with("John", "Tom", "Bart", "Tim", "Broad");
String nameStarts= "T";
int count = custNames.asLazy()
.collect(String::toLowerCase)
.countWith(String::startsWith, nameStarts.toLowerCase());
System.out.println(count);
Assert.assertEquals(2, count);
серийный API в Eclipse, Collections стремится, по-умолчанию, поэтому я назвал asLazy()
первым. Метод сбора в противном случае создал бы еще MutableList
.
Если тест кода с вашим полным набором данных, следующая параллельная версия кода может быть более производительным:
MutableList<String> custNames =
Lists.mutable.with("John", "Tom", "Bart", "Tim", "Broad");
String nameStarts= "T";
int processors = Runtime.getRuntime().availableProcessors();
int batchSize = Math.max(1, custNames.size()/processors);
ExecutorService executor = Executors.newFixedThreadPool(processors);
int count = custNames.asParallel(executor, batchSize)
.collect(String::toLowerCase)
.countWith(String::startsWith, nameStarts.toLowerCase());
executor.shutdown();
Assert.assertEquals(2, count);
asParallel()
API в Eclipse, Коллекции ленив-по-умолчанию. API заставляет вас пройти в ExecutorService
и int
партиях. Это дает вам полный контроль над параллелизмом.
Вы также можете использовать Stream API со всеми MutableCollections
в коллекциях Eclipse, поскольку они расширяют java.util.Collection
.
Примечание: Я являюсь коммиттером для коллекций Eclipse.
используя .stream(). Parallel() получите значительное улучшение производительности. – Kushan
Будьте очень осторожны. Если ваш вход не очень большой, использование функции parallel() будет активно ухудшать производительность и замедлять работу кода. –
Я думаю, что вам не хватает .map (String :: toLowerCase) после вызова .parallel() –