Интерфейс потока представлен в Java 8, который поддерживает параллельное выполнение. Интерфейс потока поддерживает сортировку, сопоставление, фильтрацию, сокращение шаблона и легко выполняется, образуя основу (наряду с лямбдами) для программирования в функциональном стиле. Существуют также соответствующие примитивные потоки ( IntStream , Двойной поток и Длинный поток ) по соображениям производительности.
В этой статье мы рассмотрим, как выполнять базовую статистику, такую как максимум, минимум, среднее (среднее) и количество вхождений для целей представления данных с помощью API потока и коллекций. Наш подход будет заключаться в создании значений с использованием одного из классов API потока ( java.util.stream ) и утилит сбора и статистики, предоставляемых в пакете java.util под названием DoubleSummaryStatistics (Вы также можете изучить Итоговую статистику и Общая сводная статистика для выполнения с ними базовой статистики).
Предположим, у нас есть набор данных, мы будем использовать из из двойного потока ((API потока) для сбора, сортировки или фильтрации наших данных и использования сводной статистики метод получения максимального, минимального, среднего значения, количества и суммы наших данных.
Мы будем использовать частоту метод Коллекций , чтобы получить количество встречаемости значения в наборе данных, которое может быть использовано для формирования основы представления в виде гистограммы.
Давайте начнем кодировать, чтобы увидеть это в действии.
package com.habeebcycle;
import java.util.stream.*;
import java.util.*;
public class BasicStats{
public static void main (String[] args) {
//Dataset as follows
double dataset[] = {32, 23, 54, 15.2, 26.3, 7.1, 18.7, 14.2, 23,
25, 21.7, 12.4, 21, 24, 42, 55, 23, 14.5, 21.3, 26.3, 53, 23,
15.2, 7.1, 15.4, 23, 15.2, 14.2, 14.2, 25, 18.7, 15.2, 14.5};
//Get the basic statistics
DoubleSummaryStatistics stats =
DoubleStream.of(dataset).summaryStatistics();
// Now stats variable has our basic stats
//Let's get the total values in our dataset
System.out.println (stats.getCount()); //Gives 33;
//Let's get the sum
System.out.println (stats.getSum()); //Gives 753.4
//Let's get the mean (average)
System.out.println (stats.getAverage()); //Gives 22.83
//Let's get the maximum
System.out.println (stats.getMax()); //Gives 55.0
//Let's get the maximum
System.out.println (stats.getMin()); //Gives 7.10
}
}
Мы можем объединить статистические результаты, чтобы работать с ними сразу, используя
stats.combine(DoubleSummaryStatistics otherStats);
Чтобы получить наш набор данных в качестве подхода к представлению, мы собираемся использовать метод потока в штучной упаковке() , чтобы метод collect мог работать с Коллекционеры класс.
Коллекторы класс имеет метод, называемый группировка по , которая может быть использована для группировки нашего набора данных в отдельный набор путем подсчета количества встречаемости каждого значения в наборе данных.
Maphistogram = DoubleStream.of(dataset) .boxed() .collect(Collectors.groupingBy( e -> e, Collectors.counting() ));
гистограмма теперь содержит все данные с числом встречаемости в виде карты “ключ-значение”. Мы можем использовать наш собственный метод для печати гистограммы с использованием звездочек.
for(Double data : histogram.keySet()){
System.out.println (
data + " : " + histogram.get(data) + " : " + getStars(histogram.get(data))
);
}
Где getstatus метод определяется следующим образом:
public static String getStars(long number){
String output = "";
for(int i = 1; i <= number; i++){
output += " * ";
}
return output;
}
Выходные данные представляют наши данные в виде гистограммы
32.0 : 1 : * 18.7 : 2 : * * 15.4 : 1 : * 42.0 : 1 : * 12.4 : 1 : * 21.7 : 1 : * 15.2 : 4 : * * * * 53.0 : 1 : * 14.2 : 3 : * * * 55.0 : 1 : * 54.0 : 1 : * 14.5 : 2 : * * 21.0 : 1 : * 26.3 : 2 : * * 23.0 : 5 : * * * * * 21.3 : 1 : * 24.0 : 1 : * 25.0 : 2 : * * 7.1 : 2 : * *
API потока в сочетании с утилитами коллекций являются мощными с простым набором инструментов для обработки набора данных. Это позволяет нам сократить огромное количество шаблонного кода, создавать более читаемые программы и повышать производительность приложений при правильном использовании.
Оригинал: “https://dev.to/habeebcycle/performing-basic-stats-in-java-8-5dfl”