Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

需求收集 #3

Open
burukeYou opened this issue Apr 29, 2024 · 16 comments
Open

需求收集 #3

burukeYou opened this issue Apr 29, 2024 · 16 comments
Assignees
Labels
enhancement New feature or request

Comments

@burukeYou
Copy link
Owner

burukeYou commented Apr 29, 2024

还需要哪些统计的API又不想手写的请在此留下你的“需求”, 或者说你也不知道能不能封装成为API你只是不想手写也可以在此留下你的统计案例,我会看看能不能封装成具有一定通用性的API。

目前需求:

  • 开窗函数 (已开发.见0.0.3以上版本)
  • 分页查看 (已开发.见0.03以上版本)
@burukeYou burukeYou self-assigned this Apr 29, 2024
@burukeYou burukeYou added the enhancement New feature or request label Apr 29, 2024
@LeonemZhang
Copy link

私有静态字段也会被扫描到fieldList中,可以考虑下是否真的有必要

@burukeYou
Copy link
Owner Author

私有静态字段也会被扫描到fieldList中,可以考虑下是否真的有必要

这个确实没有必要,后续会考虑。 但是这个仅在show方法会用到, 而这个方法仅限本地打印展示,实际开发还是不要执行这个方法

@LeonemZhang
Copy link

LeonemZhang commented May 19, 2024

需要一个能把结果映射成Map的方法,如stream的:(已添加)

lsit.stream().collect(Collectors.groupingBy(Object::getField))

@qingquaner
Copy link

支持无界数据流吗?类似一个轻量级的Flink

@miaomiaojianglove
Copy link

希望支持 join 两个数组并集操作

@MMjlo
Copy link

MMjlo commented Aug 15, 2024

作者你好,我尝试着使用您写的工具,但是使用的时候对您的这个工具并不熟悉,希望有类似Hutool这样式的文档以及示例来帮助快速上手,从而吸引更多的人来使用 (已添加见此链接)

@wanhang189
Copy link

wanhang189 commented Aug 16, 2024

希望能有收集器直接返回基础类型Map<String, List> map 而不是 SDFrame<FI2<String, BigDecimal>>取代,还得转换使用太麻烦(已添加见 toMap、toMulti2Map等方法)

@burukeYou
Copy link
Owner Author

希望能有收集器直接返回基础类型Map<String, List> map 而不是 SDFrame<FI2<String, BigDecimal>>取代,还得转换使用太麻烦

返回SDFrame是为了可以继续进行数据处理,如果返回Map就表示流式处理就结束了代表拿到了结果, 是两个不同的行为并不冲突。 可以调toMap指定字段去转换拿到结果(还是比原生的Collectors.toMap更简洁一点点的), 如果觉得麻烦后续可以加个FI2,FI3等对象自动转toMap的方法不必指定map哪个字段

@a86247985
Copy link

a86247985 commented Sep 12, 2024

当b1为空时希望能和JoinOn为false时一样在最后的join处理判断,不要直接返回一个空数组吧 (已修复,见0.1.7版本)
a1.leftJoin(b1, (a, b) -> a.getC1().equals(b.getC1()), (a, b) -> {
xxxxxxx
});

@RealDeanZhao
Copy link

可以读取并计算 List<Map<String, Object> 这样的数据结构吗?List中的每一个元素代表数据库中的一行记录,Map表示某个字段对应的值。

@burukeYou
Copy link
Owner Author

burukeYou commented Sep 24, 2024

当b1为空时希望能和JoinOn为false时一样在最后的join处理判断,不要直接返回一个空数组吧 a1.leftJoin(b1, (a, b) -> a.getC1().equals(b.getC1()), (a, b) -> { xxxxxxx });

这个是因为设计上是不管是匹配上了还是没匹配上都会回调给Join函数, 如果没匹配上(也就是所谓b1位空) 就不去回调回来,那其实是不是就失去了leftJoin的语意呢?, 仿佛跟innerJoin语意一样。

我知道这里容易发生“危险行为”, 其实我想过可以分成两个回调Join函数,一个是回调匹配上a和b,一个是只回调(a), 但我感觉实际开发时会造成这两部份代码的重复, 所以还是放到一个里去手动判断是否匹配join成功

@burukeYou
Copy link
Owner Author

可以读取并计算 List<Map<String, Object> 这样的数据结构吗?List中的每一个元素代表数据库中的一行记录,Map表示某个字段对应的值。

一样处理的呀. 把Map<String, Object> 当成对象处理就行了。 比如下面

List<Map<String,Object>> data = new ArrayList<>();
data = SDFrame.read(data).whereGe(e -> Integer.parseInt(e.get("age").toString()), 30) .toLists();

@a86247985
Copy link

a86247985 commented Sep 25, 2024

当b1为空时希望能和JoinOn为false时一样在最后的join处理判断,不要直接返回一个空数组吧 a1.leftJoin(b1, (a, b) -> a.getC1().equals(b.getC1()), (a, b) -> { xxxxxxx });

这个是因为设计上是不管是匹配上了还是没匹配上都会回调给Join函数, 如果没匹配上(也就是所谓b1位空) 就不去回调回来,那其实是不是就失去了leftJoin的语意呢?, 仿佛跟innerJoin语意一样。

我知道这里容易发生“危险行为”, 其实我想过可以分成两个回调Join函数,一个是回调匹配上a和b,一个是只回调(a), 但我感觉实际开发时会造成这两部份代码的重复, 所以还是放到一个里去手动判断是否匹配join成功

可能你有些误解我的描述,直接用现在的代码来描述,b1也就是other为没有元素的Iterable时第二层的循环内的操作完全不会执行。这个时候返回的就是一个空的resultList ,这个逻辑感觉是不符合leftjoin语义。

    protected  <R, K> List<R> leftJoinList(IFrame<K> other, JoinOn<T, K> on, Join<T, K, R> join, boolean isJoinOnce) {
        List<R> resultList = new ArrayList<>();
        for (T cur :this){
            for (K k : other) {
                if(on.on(cur,k)){
                    resultList.add(join.join(cur,k));
                    if (isJoinOnce){
                        break;
                    }
                }else {
                    resultList.add(join.join(cur,null));
                }
            }
        }
        return resultList;
    }

@burukeYou
Copy link
Owner Author

当b1为空时希望能和JoinOn为false时一样在最后的join处理判断,不要直接返回一个空数组吧 a1.leftJoin(b1, (a, b) -> a.getC1().equals(b.getC1()), (a, b) -> { xxxxxxx });

这个是因为设计上是不管是匹配上了还是没匹配上都会回调给Join函数, 如果没匹配上(也就是所谓b1位空) 就不去回调回来,那其实是不是就失去了leftJoin的语意呢?, 仿佛跟innerJoin语意一样。
我知道这里容易发生“危险行为”, 其实我想过可以分成两个回调Join函数,一个是回调匹配上a和b,一个是只回调(a), 但我感觉实际开发时会造成这两部份代码的重复, 所以还是放到一个里去手动判断是否匹配join成功

可能你有些误解我的描述,直接用现在的代码来描述,b1也就是other为没有元素的Iterable时第二层的循环内的操作完全不会执行。这个时候返回的就是一个空的resultList ,这个逻辑感觉是不符合leftjoin语义。

    protected  <R, K> List<R> leftJoinList(IFrame<K> other, JoinOn<T, K> on, Join<T, K, R> join, boolean isJoinOnce) {
        List<R> resultList = new ArrayList<>();
        for (T cur :this){
            for (K k : other) {
                if(on.on(cur,k)){
                    resultList.add(join.join(cur,k));
                    if (isJoinOnce){
                        break;
                    }
                }else {
                    resultList.add(join.join(cur,null));
                }
            }
        }
        return resultList;
    }

抱歉误会你的意思了, join空表时确实不符合语意, 稍等我今晚发个版

@wanhang189
Copy link

wanhang189 commented Sep 25, 2024

所有的FI到原对象需要有直接简单的封装方法,而不是自己去转换。建议原对象字段取值可以和收集对象字段保持一致即可;转换FI当前是个重头麻烦戏,个人觉得是个迫切需要解决的问题;重点:当前框架中间处理过程很完美,但是感觉收集器上面还是有很大欠缺,很多不是用户想要的收集结果类型;感觉FI因该不是大部分人想要的对象吧;建议后期增加一个收集器章节文档,可以把jdk8的所有收集器挪过来就行,加油

@wanhang189
Copy link

wanhang189 commented Sep 25, 2024

例如不限于:
image
image
比如上图结果直接映射到Student对象即可,不要弄到FI2自己又得转换一遍(可以用户定义映射到目标对象,哪一个属性)

@burukeYou burukeYou pinned this issue Nov 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

8 participants