1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/huoyo-distream

Клонировать/Скачать
README.md 5.9 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 08:15 abf31e4

Distream


Английский документ / ENGLISH

**Distream — это расширенный инструмент List для разработки на Java, предназначенный для обработки данных в потоковом режиме. Он включает в себя пользовательские обработчики данных, лямбда-выражения и вычисления с использованием уравнений.**
**An extended tool of List about how to process data fluently by lambda, expressions and custom class.**
  • Истинная обработка данных в потоке:
ListFrame<Map> lines = ListFrame.fromList(list);
double sum = lines.get("value").sum();
lines = lines
        .handle("value=format(value,2)") //round to the nearest hundredth
        .handle(line->line.getName()==null,"name=''") //if(line.getName()==null){line.setName('');}
        .handle(line->line.getValue()==null,"value=0","value=value+2") //value = line.getValue()==null?0:line.getValue()+2;
        .handle("name=replace(name,'#','')") //replace '#' to ''
        .handle("percent=double(value)/"+sum) //converting value's tyle to double and computing percent
        .groupBy("name").sum("percent"); //groupBy 'name'
  • Более эффективная запись (поддерживается начиная с версии 1.1.0):
ListFrame<Metric> lines = ListFrame.fromList(list);
double sum = lines.get("value").sum();
lines = lines
        .addHandler("value=format(value,2)") 
        .addHandler("name=replace(name,'#','')")
        .addHandler("percent=double(value)/"+sum) 
        .execute()
        .groupBy("name").sum("percent"); //groupBy 'name'
  • Наиболее рекомендуемый способ записи (поддерживается начиная с версии 1.1.0, обеспечивает наилучшую производительность):
ListFrame<Metric> lines = ListFrame.fromList(list);
lines = lines
        .addHandler(new DataHandler1()) 
        .addHandler(new DataHandler2()) 
        .addHandler(new DataHandler3()) 
        .addHandler(new DataHandler4()) 
        .execute();
//DataHandler1, 2, 3, 4 должны реализовывать интерфейс DataHandler
  • Удобное чтение из базы данных:
Datasource datesource = xxx;
ListFrame list = new ListFrame();
list.initDataSource(datesource);

ListFrame<Map<String,Object>> lines = list.readSql("select * from xxx").handle(a->...).handle(a->...)...;

Примечание: при чтении из базы данных необходимо импортировать соответствующий драйвер соединения, например, для MySQL:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.22</version>
</dependency>

Импорт

Импортируйте зависимости Maven:

 <dependency>
    <groupId>cn.langpy</groupId>
    <artifactId>distream</artifactId>
    <version>1.1.2</version>
 </dependency>

Чтение и преобразование данных

0. Предположим, что есть следующий файл:
序号,姓名,年龄,收入
1,张三,23,5000.11
2,李四,22,4000.22
3,李二狗,20,5000.33
4,韦陀掌,23,3000.44
5,拈花指,23,2000.55
6,小六子,18,5000.66
7,杨潇,23,3000.77
8,李留,19,5000.55
1. Чтение файла построчно

Прочитайте файл построчно и добавьте ";" в конце каждой строки, а также "=>" в начале каждой строки:

ListFrame<String> lines = ListFrame.readString("test.txt");
lines = lines
    .handle(line -> line + ";") //add ";" at the end of every line
    .handle(line -> "=>"+line ); //add "=>" at the front of every line
2. Чтение CSV-файла как карты
/*read easily*/
//ListFrame<Map<String, Object>> lines = ListFrame.readMap(path);
/*read by split symbol*/
//ListFrame<Map<String, Object>> lines = ListFrame.readMap(path,",");
/*define data types*/
ListFrame<Map<String, Object>> lines = ListFrame.readMap(path,new Class[]{Integer.class,String.class,Integer.class,Double.class});
lines = lines
        .handle("收入=收入*0.8")
        .handle("序号='0'+序号;姓名=序号+姓名")//add "0" at the front of 序号;rename 姓名 by 序号+姓名
        .handle(new MapHandler());//add a key named "newKey" whose value is 1  ;MapHandler can be seen as follows

Создайте собственный обработчик данных, который должен реализовать интерфейс DataHandler, где E — тип каждого объекта в списке:

public class MapHandler implements DataHandler<Map<String, Object>> {
    @Override
    public Map<String, Object> handle(Map<String, Object> line) {
        line.put("newKey",1);
        return line;
    }
}

Также можно записать более кратко:

lines = lines(map->{
  map.put("newKey",1);
  return map;
});
3. Получение данных по столбцам

Получите данные по столбцу и вычислите максимальное, минимальное и среднее значения:

/*obtain data by column name*/
ListFrame<Double> indexs = lines.get("收入");
/*you can user ObjectName::getXX if ListFrame's elements are java objects*/
//ListFrame<Integer> indexs = lines.get(User::getAge);
double maxIncome = indexs.max();
double minIncome = indexs.min();

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/huoyo-distream.git
git@api.gitlife.ru:oschina-mirror/huoyo-distream.git
oschina-mirror
huoyo-distream
huoyo-distream
master