Если F
- имя столбца, O
- оператор, а V
- значение, и если вам нужно получить выражение вроде column1 = 1 and column2 > 2 and ...
, вам просто нужно использовать Collectors.joining(" and ")
:
String query = data.stream() // stream1 - original stream of the data collection
.filter(f -> f.getData().equalsIgnoreCase("yes")) // stream2 - contains only elements with "yes"
.map(f -> f.getF()+" "+f.getO()+" "+f.getV()) // stream3 - stream of the strings produced by expression f.getF()+" "+f.getO()+" "+f.getV()
.collect(Collectors.joining(" and "));
Некоторые пояснения. Здесь .collect(Collectors.joining(...))
объединяет элементы потока, созданного предыдущим вызовом .map(f -> f.getF()+" "+f.getO()+" "+f.getV())
.
Создано 3 разных потока:
String query = data.stream() // stream1 - original stream of the data collection
.filter(f -> f.getData().equalsIgnoreCase("yes")) // stream2 - contains only elements with "yes"
.map(f -> f.getF()+" "+f.getO()+" "+f.getV()) // stream3 - stream of the strings produced by expression f.getF()+" "+f.getO()+" "+f.getV()
.collect(Collectors.joining(" and","how to do this" , suffix));
Итак, сначала вы присоединяетесь к f.getF()
, f.getO()
и f.getV()
с " "
объединителем следующим образом:
.map(f -> f.getF()+" "+f.getO()+" "+f.getV())
Вы получите поток строки вида
"F1 O1 V1",
"F2 O2 V2",
...
К этому потоку присоединится .collect(Collectors.joining(...));
. Например, при использовании .collect(Collectors.joining(" and "));
будет получена строка вида
"F1 O1 V1 and F2 O2 V2 and ..."