Присоедините table_1
до table20
, чтобы получить идентификаторы проектов. Затем присоединитесь к table_2
, чтобы получить идентификаторы связанных проектов. Наконец, присоединитесь к table_1
, чтобы получить имена связанных проектов.
SELECT @RelatedProjects = (SELECT t1b.project + ';'
FROM table20 t20
LEFT JOIN table_1 t1a
ON t1a.project = t20.project_title
LEFT JOIN table_2 t2
ON t2.id = t1a.id
LEFT JOIN table_1 t1b
ON t1b.id = t2.related_project
FOR XML PATH(''));
(работает только надёжно, если table_1.project
уникальна. Подумайте о том, чтобы сохранить проекты в table20
по их идентификаторам, а не по их имя.)
Решение с использованием оператора по модулю и одного цикла. Нет риска IndexOutOfBounds.
for (int i = 0; i < list.length; i++) {
if (i % 6 > 2) {
System.out.println(list[i]);
}
}
Вы можете переключить условие на i % 6 < 3
, если вместо этого хотите получить первые 3 из каждых 6 элементов в массиве.
РЕДАКТИРОВАТЬ: следующее берет ваш ввод и помещает его в List<String[]>
, где каждый элемент содержит 3 строки.
import java.nio.file.*;
import java.util.stream.Stream;
import java.util.*;
import java.nio.charset.Charset;
public class Partition2 {
public static void main(String[] args) {
String[] input = ...
try (Stream<String> stream = Arrays.stream(input)) {
// https://stackoverflow.com/a/34759493/3717691
String[] array = stream.map(line -> line.trim()).filter(line -> !line.isEmpty()).toArray(String[]::new);
List<String[]> results = new ArrayList<String[]>();
String[] tmp = new String[3];
for (int i = 0; i < array.length; i++) {
tmp[i % 3] = array[i];
if (i % 3 == 2) {
results.add(tmp);
tmp = new String[3];
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Это мой метод для использования:
public static String[] getSomeThing(String[] array) {
List<String> container = new ArrayList<>(3);
List<String> tmp = new ArrayList<>();
int fullTimes = 0;
for (String str : array) {
if (container.size() == 3) {
if (++fullTimes % 2 == 0) {
tmp.addAll(container);
}
container.clear();
container.add(str);
} else {
container.add(str);
}
}
if (fullTimes % 2 != 0) {
tmp.addAll(container);
}
String[] result = new String[tmp.size()];
tmp.toArray(result);
return result;
}
for(int i=3;i<s1.length;i+=6){
for(int j=0;j<3;j++){
s1[i+j]; // here is your element
}
}
просто отрегулируйте условия циклов, как вы могли бы получить IndexOutOfBoundsException
, если размер arrag не делится на 6