Попробуйте,
List<String> records = Arrays.asList("one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen");
final List<String> subRecords = IntStream.range(0, records.size()).filter(i -> records.get(i).equals("eight"))
.mapToObj(i -> records.subList(Math.max(i - 5, 0), Math.min(i + 6, records.size())))
.flatMap(List::stream).collect(Collectors.toList());
Обратите внимание, я использую List
из String
в качестве исходных записей.Измените его в соответствии с вашим.
В качестве альтернативы можно сделать то же самое, например:
final int midIdx = records.indexOf("eight");
final int lowerBound = Math.max(midIdx - 5, 0);
final int upperBound = Math.min(midIdx + 5, records.size());
final List<String> subRecords = IntStream.range(0, records.size()).limit(upperBound + 1).skip(lowerBound)
.mapToObj(records::get).collect(Collectors.toList());
Обновление
Я внес изменения, предложенныеследующий комментарий, так как это упрощает код.