昨天看到java9 支持 reactive stream,但是java被oracle收购之后,我为什么一定要用reactive stream呢,掌握java8 stream感觉跟python中pandas、numpy一样高效的操作数据集。
1 类型转换
这里使用到map转,非常简洁,你只需要明白函数式编程,输入到输出,就容易理解了
List<Integer> currencys = Stream.of(accAccountSubject.getAssistAccounting().split(Split.COMMA)).map(c -> Integer.parseInt(c)).collect(Collectors.toList());
2 集合差异
使用filter,就可以将集合过滤出来
List<Integer> oldCurrencies = Stream.of(oldSub.getAssistAccounting().split(CommonSettingConstants.Split.COMMA))
.map(c -> Integer.parseInt(c)).collect(Collectors.toList());
List<Integer> newCurrencies = Stream.of(newSub.getAssistAccounting().split(CommonSettingConstants.Split.COMMA))
.map(c -> Integer.parseInt(c)).collect(Collectors.toList());
List<Integer> delCurrencies = oldCurrencies.stream().filter(o->!newCurrencies.contains(o)).collect(Collectors.toList());
3 树的构建
树的转换也非常优雅,不需要什么算法,只需要确定输入、输出以及给定关系就可以了
@Data
public class AccInitialBalanceTreeResp extends AccInitialBalanceResp {
/**
* 下级节点
*/
private List<AccInitialBalanceTreeResp> children;
}
/**
* 将列表转成树结构
* @param list
* @param pId
* @return
*/
public List<AccInitialBalanceTreeResp> list2Tree(List<AccInitialBalanceTreeResp> list, String pId) {
// 组装成父子的树形结构
return list.stream().filter(m1 -> m1.getPid().equals(pId)