Для лучшей производительности и для вставки замещающих значений в правильное положение используйте indexOf(o)
, remove(index)
и addAll(index, c)
:
Демо
List attributes = new ArrayList<>(Arrays.asList("A", "B", "*", "C"));
Collection additionalValues = Arrays.asList("X","Y","Z");
int idx = attributes.indexOf("*");
if (idx != -1) {
attributes.remove(idx);
attributes.addAll(idx, additionalValues);
}
System.out.println(attributes);
Выход
[A, B, X, Y, Z, C]
Если заказ не введите значение возврата remove(o)
:
if (attributes.remove("*"))
attributes.addAll(additionalValues);
Выход
[A, B, C, X, Y, Z]
Вы можете использовать JSON_TABLE
для преобразования JSON в производную таблицу, из которой затем можно извлечь значения из:
SELECT j.value
FROM test t
JOIN JSON_TABLE(t.jsonStr,
'$[*]'
COLUMNS(bool BOOLEAN PATH '$.bool',
number INT PATH '$.number',
value VARCHAR(20) PATH '$.value')) j
WHERE j.bool = true AND j.number = 1
Вывод:
value
world
[1113 ] Если вы также хотите получить индекс в пределах каждого значения JSON соответствующего value
, вы можете добавить предложение FOR ORDINALITY
к вашему JSON_TABLE
, например:
SELECT j.idx, j.value
FROM test t
JOIN JSON_TABLE(t.jsonStr,
'$[*]'
COLUMNS(idx FOR ORDINALITY,
bool BOOLEAN PATH '$.bool',
number INT PATH '$.number',
value VARCHAR(20) PATH '$.value')) j
WHERE j.bool = true AND j.number = 1
[1114 ] Вывод:
idx value
2 world