Вот также мой ответ (вдохновленный ответами других)
let r = (a,c='-',f=a[0],g=[]) => (a.map((x,i,a,b=a[i+1]) =>
b<=x+1 ? 0 : (g.push( f-x ? f+c+x : f+'' ),f=b) ),g);
let a = [1,2,3,4,7,8,12,15,21,21,22,23];
let b = [-7,-5,-4,-3,-1,0,1,3,4,5,8];
let r = (a,c='-',f=a[0],g=[]) => (a.map((x,i,a,b=a[i+1]) =>
b<=x+1 ? 0 : (g.push( f-x ? f+c+x : f+'' ),f=b) ),g);
let J= JSON.stringify;
console.log(J(a) + ' -> ' + J(r(a)));
console.log(J(b) + ' -> ' + J(r(b,'..')));
Объяснение: g = [] содержит результат, первый элемент диапазона равен f=a[0]
, в начале мы проверяем, равен ли следующий элемент b=a[i+1]
текущему элементу x или меньше b<=x+1
или меньше его. Если NO (что означает, что диапазон заканчивается или i
является последним индексом - b = undefined), тогда мы увеличиваем диапазон до результата g.push( f-x ? f+'-'+x : f+'' )
(мы проверяем, что x не равен f на f-x -> f-x!=0 -> f!=x
), после того, как push установил первый диапазон элемент f
до следующего диапазона (элемент b
).
Основная папка, в которую я помещаю дополнительные файлы конфигурации, находится под src/main/java/resources. Обычно я создавал подкаталоги под там. Тесты могут иметь свои собственные файлы конфигурации src/test/resources.
Можно использовать директивы в разделе сборки pom.xml для определения дополнительных каталогов с ресурсами и где скопировать файлы в определенные места в целевом каталоге. Обычно конвенция возникает для языка или платформы, которую Вы пытаетесь использовать. В этом случае путаница может быть скрыта в родительском pom.xml