Правильная реализация работы цикла и массива java

Помогите заменить в main, в цикле for выражение "i < 28" на что-то вроде "i < hashMapRes.size()".

import java.util.ArrayList;
import java.util.HashMap;

public class Test {
    static ArrayList<String> values = new ArrayList<>();

    public static void main(String[] args){
        for (int i = 0; i < 28; i++){
        System.out.println((i + 1) + ") " + hashMapRes(i));
        }
    }

    static String hashMapRes(int i) {
        HashMap<String, String> hash_sources = new HashMap<>();
        hash_sources.put("Google", "https://news.google.com/rss?hl=ru&gl=RU&ceid=RU:ru");
        hash_sources.put("Яндекс", "https://news.yandex.ru/index.rss");
        hash_sources.put("Mail.ru", "https://news.mail.ru/rss/90/");
        hash_sources.put("Lenta", "https://lenta.ru/rss");
        hash_sources.put("Известия", "https://iz.ru/xml/rss/all.xml");
        hash_sources.put("Вести", "https://www.vesti.ru/vesti.rss");
        hash_sources.put("Гарант", "http://rss.garant.ru/news/");
        hash_sources.put("Life", "https://life.ru/xml/feed.xml?hashtag=%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8");
        hash_sources.put("РБК", "http://static.feed.rbc.ru/rbc/logical/footer/news.rss");
        hash_sources.put("Газета.ру", "https://www.gazeta.ru/export/rss/first.xml");
        hash_sources.put("Ведомости_1", "https://www.vedomosti.ru/rss/news");
        hash_sources.put("Ведомости_2", "https://www.vedomosti.ru/rss/articles");
        hash_sources.put("BBC", "http://feeds.bbci.co.uk/russian/rss.xml");
        hash_sources.put("Поплулярная механика", "https://www.popmech.ru/out/public-all.xml");
        hash_sources.put("Наука и жизнь", "https://www.nkj.ru/rss/");
        hash_sources.put("RT", "https://russian.rt.com/rss");
        hash_sources.put("C-News", "https://cnews.ru/inc/rss/news.xml");
        hash_sources.put("Правительство РФ", "http://government.ru/all/rss/");
        hash_sources.put("Госдума РФ", "http://duma.gov.ru/news/feed/");
        hash_sources.put("Российская газета_1", "https://rg.ru/tema/ekonomika/rss.xml");
        hash_sources.put("Российская газета_2", "https://rg.ru/tema/obshestvo/rss.xml");
        hash_sources.put("Ростех", "https://rostec.ru/rss_yandex/");
        hash_sources.put("Коммерсант_1", "https://www.kommersant.ru/RSS/section-business.xml");
        hash_sources.put("Коммерсант_2", "https://www.kommersant.ru/RSS/section-accidents.xml");
        hash_sources.put("Эксперт", "https://expert.ru/doc-list/rss/");
        hash_sources.put("Nasa", "https://www.nasa.gov/rss/dyn/breaking_news.rss");
        hash_sources.put("Яндекс.Космос", "https://news.yandex.ru/cosmos.rss");
        hash_sources.put("Astronews", "https://astronews.space/?format=feed&type=rss");

        values = new ArrayList<>(hash_sources.values());
        return values.get(i);
    }
}

Ответы (1 шт):

Автор решения: Andrew

У вас функция возвращает строку, и соответственно она не подойдет для цикла. Я могу предложить сделать глобальную переменную по примеру source которая будет соответствовать созданному массиву. И ваш цикл будет проходить по данной переменной. Например:

ArrayList<String> values = new ArrayList<>()

и в функции делаем так:

values = new ArrayList<>(hash_sources.values());

и дальше ваш цикл будет работать так:

for (int i = 0; i < values.size; i++){
 System.out.println(hashMapRes(i));
}

и я бы убрал глобальную переменную source если она вам нигде не нужна кроме как в функции. Пусть функция возвращает что-то типа такого:

return values.get(i);

так будет проще я думаю :)

UPDATE

Я кажется понял в чем у вас проблема. Вы вызываете цикл и просите его пройтись по массиву в тот момент когда он еще пустой. Я думаю что нужно сделать функцию, которая будет добавлять записи в массив, либо делать это сразу в функции main. Если же все-таки вы хотите вынести максимум за пределы функции main то делайте отдельно функцию которая будет добавлять в массив элементы, и дальше перед запуском цикла проверяйте размер массива. Если например сейчас вы сделаете так:

if(values.isEmpty){
    for (int i = 0; i < values.size; i++){
         System.out.println(hashMapRes(i));
    }
}else{
     System.out.println("array is empty);
}

то по логике выведется сообщение в консоль. Поэтому вам нужно сначала делать добавление в массив а потом уже у него (массива) запрашивать элемент. Я думаю нужно делать так:

public static void main(String[] args){
  addToArr()
  for (int i = 0; i < 28; i++){
  System.out.println((i + 1) + ") " + hashMapRes(i));
  }
}

дальше функция добавления в массив:

addToArr(){
   values.add("your_site")
}

дальше делаем такую конструкцию:

if(!values.isEmpty){
   for (int i = 0; i < values.size; i++){
      System.out.println(values[i]);
   }
}else{
   System.out.println("array is empty);
}

ну либо можно сделать функцию которая возвращает элемент массива:

public String getElement(String[] array, int index) {
    return array[index];
}

и дальше уже в цикле будет так:

if(values.isEmpty){
  for (int i = 0; i < values.size; i++){
     System.out.println(getElement(values,i));
  }
}else{
   System.out.println("array is empty);
}
→ Ссылка