Я решил, что хочу выполнить некоторые измерения простых операций с потоками, сравнив их с соответствующими структурами итераций перед потоками.
У меня есть ArrayList определенной длины, так что все элементы списка имеют три* символьные строки.
Вот соответствующие методы тестирования для этого:
@Benchmark
public long shortLengthConstantSizeFor() {
long count = 0;
for (String val : shortLengthListConstantSize) {
if (val.length() == 3) { ++ count; }
}
return count;
}
@Benchmark
public long shortLengthConstantSizeForEach() {
IntHolder intHolder = new IntHolder();
shortLengthListConstantSize.forEach(s -> { if (s.length() == 3) ++ intHolder.value; } );
return intHolder.value;
}
@Benchmark
public long shortLengthConstantSizeLambda() {
return shortLengthListConstantSize.stream().filter(s -> s.length() == 3).count();
}
@Benchmark
public long shortLengthConstantSizeLambdaParallel() {
return shortLengthListConstantSize.stream().parallel().filter(s -> s.length() == 3).count();
}
Все, что я хочу подтвердить сообществу, это то, являются ли они "функционально эквивалентными" и действительно будут измерять то, чтоони, кажется, измеряют.Я не предоставляю здесь измерения, потому что это отвлекает.
Обратите внимание, что "shortLength" относится к "короткому списку".У меня также есть несколько блоков этих методов, со списками различной длины, вплоть до одного с 300k элементами.