Как пропустить 3 элемента в массиве строк Java и получить следующие 3 элемента

Присоедините 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 по их идентификаторам, а не по их имя.)

0
задан maspinu 19 January 2019 в 15:39
поделиться

3 ответа

Решение с использованием оператора по модулю и одного цикла. Нет риска 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();
        }
    }
}
0
ответ дан Jeppe 19 January 2019 в 15:39
поделиться

Это мой метод для использования:

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;
}
0
ответ дан TongChen 19 January 2019 в 15:39
поделиться
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

0
ответ дан Antoniossss 19 January 2019 в 15:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: