关于Java函数式编程

nnnnyyyy 2021-02-28 10:14:18
用java读取Neo4j数据库。返回一个org.neo4j.driver.Result类型。需要转化为List<WechatDepartment>。发现里面有<T> List<T> list(Function<Record, T> var1),这种函数式编程,请问应该怎么以调用?


public Result selectChild(Long departmentId) {

try {
Map<String, Object> paramentMap = Collections.singletonMap("departmentId", departmentId);

String sqlText = "MATCH(N:WechatDepartment)-[:child]->(M:WechatDepartment) \n" +
"WHERE N.departmentId = {departmentId} \n" +
"RETURN ID(M) as id, M.departmentId as departmentId, M.name as name, M.order as order, M.enable as enable";

//返回一个org.neo4j.driver.Result类型
Result result = session.run(sqlText, paramentMap);

//需要转化为List<WechatDepartment>

//方法1 List<Record> list();
List<Record> records = result.list();

//方法2 <T> List<T> list(Function<Record, T> var1)
???


return result;
} catch (Exception e) {
System.out.println(e);
throw e;
} finally {
//session.close();
}
}



public interface Result extends Iterator<Record> {
List<String> keys();

boolean hasNext();

Record next();

Record single() throws NoSuchRecordException;

Record peek();

Stream<Record> stream();

List<Record> list();

<T> List<T> list(Function<Record, T> var1);

ResultSummary consume();
}


...全文
280 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
result是个接口,在实现类里面写调用函数的逻辑才真的调用啊
     @Override
			public <T> List<T> list(Function<String, T> var1) {
				List<String> list = this.list();
				return list.stream().map(var1::apply).collect(Collectors.toList());
			}
nnnnyyyy 2021-03-01
  • 打赏
  • 举报
回复
引用 1 楼 sotondolphin 的回复:
你可以定义一个 Function 的对象,然后传入到那个list 方法 Function<Record, WechatDepartment> getWechatDepartmenList = record -> { return 从record 里面抽出WechatDepartment的逻辑; // 比如 WechatDepartment department = new WechatDepartment(); department.setName(record.getName) department.setCode(record.getDeptCode); return department; } List<WechatDepartment> departments = result.list(getWechatDepartment);
首先感谢您的回复,我封装了上面的方法,发现并没有调用到,请问是什么原因?

public class RecordToBean {

    public static Function<Record, WechatDepartment> recordToWechatDepartment = record -> {

//这里没有打印
        System.out.println("===================:" + record.get("name").asString());

        WechatDepartment wechatDepartment = new WechatDepartment();

        wechatDepartment.setDepartmentId(record.get("departmentId").asLong());
        wechatDepartment.setName(record.get("name").asString());
        wechatDepartment.setParentId(record.get("parentId").asLong());
        wechatDepartment.setOrder(record.get("order").asLong());
        wechatDepartment.setEnable(record.get("enable").asInt());

        return wechatDepartment;
    };
}

            //方法2
            List<WechatDepartment> departments = result.list(RecordToBean.recordToWechatDepartment);
//长度为0
            System.out.println("departments.size():" + departments.size());
sotondolphin 2021-02-28
  • 打赏
  • 举报
回复
你可以定义一个 Function 的对象,然后传入到那个list 方法 Function<Record, WechatDepartment> getWechatDepartmenList = record -> { return 从record 里面抽出WechatDepartment的逻辑; // 比如 WechatDepartment department = new WechatDepartment(); department.setName(record.getName) department.setCode(record.getDeptCode); return department; } List<WechatDepartment> departments = result.list(getWechatDepartment);

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧