java - 在查询生成器中使用子字符串操作字符串

标签 java arrays list arraylist query-builder

我有一个像这样的查询生成器:

@Override
public List<ComplementoMaterial> findSomething(String codigoPrestador, String documentoPrestador, String numeroLote, String codDocumento, List<String> codigosServicos) {
    return builder().query(sqlComplementos())
        .set("codPrestador", codigoPrestador)
        .set("docPrestador", documentoPrestador)
        .set("numeroLote", numeroLote)
        .set("codDocumento", codDocumento)
        .set("codServicos", codigosServicos)
        .mapper(new RowMapper<ComplementoMaterial>() {
            @Override
            public ComplementoMaterial mapRow(ResultSet rs, int rowNum) throws SQLException {
                ComplementoMaterial c = new ComplementoMaterial();
                c.setCodigoServico(rs.getLong("COD_SERVICO"));
                c.setRegistroAnvisa(rs.getString("COD_MATERIAL"));
                c.setReferencia(rs.getString("COD_REF_MATERIAL"));
                c.setAutorizacaoFuncionamento(rs.getString("NUM_AUT_FAT"));
                return c;
            }
        }).executeQuery();
}

当我设置codigosServicos时,我希望向他应用一个子字符串,因此对于每个索引,我需要在该字符串的第4个字符之后获取。例如:

如果在 codigoServicos 中我有一个如下的列表 ["Michael","Jackson","Lebron"],我需要查询仅采用 ["ael", "son", "on"]。

我已经尝试添加一个只是codigoServicos.substring(4),但由于他被设置为列表,所以这是不可能的。而且我也无法破坏集合来添加 for 循环。

有什么想法可以帮助我吗?

谢谢

最佳答案

您使用的是 Java 8+ 吗?您可以使用流在一行中完成此操作,如下所示:

.set("codServicos", codigosServicos.stream().map(s -> s.substring(4)).collect(Collectors.toList()))

否则你必须使用循环,抱歉。当然,您可以在执行 set 之前执行循环:

@Override
public List<ComplementoMaterial> findSomething(String codigoPrestador, String documentoPrestador, String numeroLote, String codDocumento, List<String> codigosServicos) {
    List<String> substrings = new List<>(codigosServicos.size());
    for (String name : codigosServicos) {
        substrings.add(name.substring(4));
    }
    return builder().query(sqlComplementos())
        .set("codPrestador", codigoPrestador)
        .set("docPrestador", documentoPrestador)
        .set("numeroLote", numeroLote)
        .set("codDocumento", codDocumento)
        // add list of substrings instead of the original list
        .set("codServicos", substrings)
        .mapper(new RowMapper<ComplementoMaterial>() {
            @Override
            public ComplementoMaterial mapRow(ResultSet rs, int rowNum) throws SQLException {
                ComplementoMaterial c = new ComplementoMaterial();
                c.setCodigoServico(rs.getLong("COD_SERVICO"));
                c.setRegistroAnvisa(rs.getString("COD_MATERIAL"));
                c.setReferencia(rs.getString("COD_REF_MATERIAL"));
                c.setAutorizacaoFuncionamento(rs.getString("NUM_AUT_FAT"));
                return c;
            }
        }).executeQuery();
}

关于java - 在查询生成器中使用子字符串操作字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62050565/

相关文章:

java - __builtin_clz 的 Java 等价物是什么?

c - 在结构数组中分配结构数据?

c# - 具有超时/过期能力的列表

java - 从 JSESSIONID 中删除服务器名称

java - 为什么我无法通过 JNDI 使用远程接口(interface)访问我的 EJB?

java - 将java util日期作为时间戳存储到mysql中

javascript - 将 JSON 对象转换为 JS 键/值对数组

arrays - matlab:在元素之后插入元素?

python - 如何使用变量将数据帧传递给函数?

c# - 如何获得一组数字的所有组合,这些数字加起来等于或仅略高于一组数字?