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

OSCHINA-MIRROR/huoyo-distream

Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README-EN.md

Distream


中文文档/CHINESE

Инструмент расширенного функционала List для обработки данных с использованием лямбда-выражений и пользовательских классов.

  • Обработка потока данных в реальном времени:
lines = lines
        .handle("value=format(value,2)") //округляем до ближайшей сотой
        .handle(line->line.getName()==null,"name=''") //если (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,'#','')") //заменяем '#' на ''
        .handle("percent=double(value)/"+sum) //преобразуем тип value в double и вычисляем процент
        .groupBy("name").sum("percent"); //группировка по 'name'
  • Простое чтение данных через SQL:
Datasource datesource = xxx;
ListFrame list = new ListFrame();
list.initDataSource(datesource);

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.1<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 + ";") //добавляем ";" в конце каждой строки
    .handle(line -> "=>"+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'+序号;姓名=序号+姓名")//добавляем "0" в начало 序号; переименовываем 姓名 с помощью 序号+姓名
        .handle(new MapHandler());//добавляем ключ с именем "newKey" со значением 1; MapHandler можно представить следующим образом

Определите обработчик данных, который должен реализовывать DataHandler:

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

Вы также можете использовать DataHandler следующим образом:

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

вычисление max, min и avg;

/*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();
double avgIncome = indexs.avg();
4. Группировка
MapFrame<Object, ListFrame> agesGroup = lines.groupBy("年龄");
Map<Object, Integer> count = agesGroup.count();
Map<Object, Double> incomeAvg = agesGroup.avg("收入");
Map<Object, Double> incomeSum = agesGroup.sum("收入");
Map<Object, ListFrame> incomeConcat = agesGroup.concat("收入");
/*continuous groupBy*/
MapFrame<Object, MapFrame<Object, ListFrame>> incomeAgeConcat = lines.groupBy("收入").groupBy("年龄");
5. Сохранение данных в текстовый файл
/*save to file*/
lines.toFile("save.txt");
6. Преобразование данных между List и ListFrame
List<Object> list = ...;
ListFrame<Object> lines = ListFrame.fromList(list);
list = lines.toList();
7. Преобразование данных между Map и Object 8. Replace data
/*replace "xxx" to "yyy"*/
lines = lines.replace("需要替换的列", "xxx", "yyy");

9. Convert types

List<String> list = Arrays.asList("1", "2", "3", "4");
ListFrame<Integer> listFrame = ListFrame.fromList(list);
ListFrame<Integer> listInt = listFrame.asInteger();
ListFrame<Double> listDouble = listFrame.asDouble();
ListFrame<Float> listFloat = listFrame.asFloat();
ListFrame<String> listString = listFloat.asString();

10. Elements's frequencies

List<Integer> list = Arrays.asList(2, 2, 2, 4);
MapFrame<Integer, Integer> listFrame = ListFrame.fromList(list).frequency()
/*map {2=3,4=1}*/

11. Variance and standard deviation

List<Integer> list = Arrays.asList(2, 2, 2, 4);
ListFrame<Integer> listFrame = ListFrame.fromList(list);
listFrame.variance(); //方差
listFrame.standardDeviation(); //标准差

12. Remove the null

List<Integer> list = Arrays.asList(2, null, 2, null, 6);
ListFrame<Integer> listFrame = ListFrame.fromList(list);
listFrame = listFrame.dropNull();
//[2,null,2,null,6]->[2,2,6]

13. Remove the repeated

List<Integer> list = Arrays.asList(2, 2, 2, 6, 6);
ListFrame<Integer> listFrame = ListFrame.fromList(list);
listFrame = listFrame.distinct();
//[2,2,2,6,6]->[2,6]

14. Common functions

/*replace "xxx" to "yyy"*/
ListFrame<Map<String, Object>> lines = xxx;
/*convert code to int*/
lines = lines.handle("id=int(code)");

/*convert value to double*/
lines = lines.handle("percent=double(value)");

/*convert value to string*/
lines = lines.handle("name=string(value)");

/*substring is like java substring*/
lines = lines.handle("name=substring(name,1,2)");

/*replace "xxx" to "yyy"*/
lines = lines.handle("name=replace(name,'xxx','yyy')");
/*you can also use '-' to replace if you only want to replace 'xxx' */
lines = lines.handle("name=name-'xxx'");

/*index is like java indexof*/
lines = lines.handle("id=index(name,'xxx')");

/*round to the nearest hundredth*/
lines = lines.handle("percent=format(percent,2)");

Комментарии ( 0 )

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

Введение

List — это библиотека расширений для потоковой обработки объектов List, которая включает в себя пользовательские обработчики данных, лямбда-выражения и вычисления с использованием уравнений (list.handle(a->...).handle(a->...).handle(a->...)). Это инструмент расширения List для обработки данных с помощью лямбда-выражений и пользовательских классов. Развернуть Свернуть
Apache-2.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