Если Вы готовы пользоваться внешней библиотекой, проверьте Apache Commons IO (JAR 200 КБ). Это содержит org.apache.commons.io.FileUtils.readFileToString()
метод, который позволяет Вам читать все File
в String
с одной строкой кода.
Пример:
import java.io.*;
import java.nio.charset.*;
import org.apache.commons.io.*;
public String readFile() throws IOException {
File file = new File("data.txt");
return FileUtils.readFileToString(file, StandardCharsets.UTF_8);
}
Вы можете написать свой собственный класс Iterator, который реализует интерфейс Iterator . Затем вы можете заставить его конструктор принимать три массива, а затем использовать его для циклического перебора каждой комбинации с помощью foreach.
Однако я думаю, что это будет значительно медленнее, поэтому я бы избегал этого. Было бы интересно узнать, почему вы хотите избежать вложенных циклов foreach?
По логике вещей нужно как-то перебирать каждый элемент. Вы просто перемешиваете процесс.
Если несколько циклов for выглядят некрасиво, возможно, вам следует поместить ваши массивы в их собственные классы, которые имеют свои собственные инкапсулированные «проверки».
На самом деле вы не предоставили достаточно информации, чтобы узнать, какова альтернатива. Если вы действительно хотите вызвать method () со всеми комбинациями опций из $ as, $ bs и $ cs, то вложенные циклы будут делать то, что нужно.
Вас беспокоит многократное вложенное выполнение циклов, или тот факт, что Метод () вызывается count ($ as) * count ($ bs) * count ($ cs) раз?
Думали ли вы о том, что подсчет каждого массива и умножение их всех вместе, чтобы получить общее количество перестановок, а затем выполнить для i, чтобы повторить этот подсчет? Вам придется проделать забавные манипуляции со счетчиками для каждого массива, но это должно сработать.