Манипулирование строкой с подстрокой внутри построителя запросов - PullRequest
0 голосов
/ 27 мая 2020

У меня есть построитель запросов вроде этого:

@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 , я sh применяю к нему подстроку, поэтому для каждого индекса мне нужно взять сразу после 4-го символа этой строки. Например:

Если в codigoServicos у меня есть следующий список [«Майкл», «Джексон», «Леброн»], мне нужно, чтобы запрос принимал только [«аэль», «сын», «на "].

Я уже пытался добавить только codigoServicos.substring (4), но поскольку он установлен как List, это невозможно. И я также не могу сломать набор, чтобы добавить для l oop.

Любая идея мне поможет?

Tks

1 Ответ

0 голосов
/ 27 мая 2020

Вы используете Java 8+? Вы можете сделать это в одной строке с потоками, например:

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

Otherws ie, вы должны использовать al oop, извините. Вы, конечно, можете выполнить l oop перед тем, как 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();
}
...