java - 如何使调用多个 ListIterators 更有效?
问题描述
所以我的问题是,是否有可能通过使用带有列表名称(foodList、foodAmount 等)的数组来简化这段代码,而不是用列表名称(来自所述数组)进行某种循环替换它们的占位符迭代器?
这是代码:
public static void writeFile() throws IOException{
ListIterator<String> foodIterator = GrocerieList.foodList.listIterator(0);
ListIterator<Integer> foodAmountIterator = GrocerieList.foodAmount.listIterator(0);
ListIterator<String> drinkIterator = GrocerieList.drinkList.listIterator(0);
ListIterator<Integer> drinkAmountIterator = GrocerieList.drinkAmount.listIterator(0);
FileWriter writer = new FileWriter("/Users/c-mon/IdeaProjects/final/src/shoppingList.txt");
// FOOD
writer.write("foodList");
writer.write(System.getProperty( "line.separator" ));
if(foodIterator.hasNext()){
do{
writer.write(foodIterator.next());
writer.write(System.getProperty( "line.separator" ));
}while(foodIterator.hasNext());
}else{
writer.write("empty");
writer.write(System.getProperty( "line.separator" ));
}
writer.write("foodAmount");
writer.write(System.getProperty( "line.separator" ));
if(foodAmountIterator.hasNext()){
do{
writer.write(foodAmountIterator.next() + "");
writer.write(System.getProperty( "line.separator" ));
}while(foodAmountIterator.hasNext());
}else{
writer.write("empty");
writer.write(System.getProperty( "line.separator" ));
}
// DRINKS
writer.write("drinkList");
writer.write(System.getProperty( "line.separator" ));
if(drinkIterator.hasNext()){
do{
writer.write(drinkIterator.next());
writer.write(System.getProperty( "line.separator" ));
}while(drinkIterator.hasNext());
}else{
writer.write("empty");
writer.write(System.getProperty( "line.separator" ));
}
writer.write("drinkAmount");
writer.write(System.getProperty( "line.separator" ));
if(drinkAmountIterator.hasNext()){
do{
writer.write(drinkAmountIterator.next() + "");
writer.write(System.getProperty( "line.separator" ));
}while(drinkAmountIterator.hasNext());
}else{
writer.write("empty");
writer.write(System.getProperty( "line.separator" ));
}
writer.close();
}
这是声明列表的地方
import java.util.ArrayList;
import java.util.ListIterator;
public class GrocerieList {
static ArrayList<String> foodList = new ArrayList<>();
static ArrayList<String> hygieneList = new ArrayList<>();
static ArrayList<String> drinkList = new ArrayList<>();
static ArrayList<String> otherList = new ArrayList<>();
static ArrayList<Integer> foodAmount = new ArrayList<>();
static ArrayList<Integer> hygieneAmount = new ArrayList<>();
static ArrayList<Integer> drinkAmount = new ArrayList<>();
static ArrayList<Integer> otherAmount = new ArrayList<>();
public static void foodOutput (){
ListIterator<String> foodListIterator = foodList.listIterator(0);
ListIterator<Integer> foodAmountIterator = foodAmount.listIterator(0);
if(foodListIterator.hasNext()){
System.out.println("\t" + "Food");
do {
System.out.println("\t" + foodAmountIterator.next() + "\t\t" + "\t--\t" + "\t\t" + foodListIterator.next());
}while (foodListIterator.hasNext());
System.out.println(" ");
}else{
System.out.println("\t" + "Food");
System.out.println("\t" + "No food on your list");
System.out.println(" ");
}
}
public static void drinkOutput (){
ListIterator<String> drinkListIterator = drinkList.listIterator(0);
ListIterator<Integer> drinkAmountIterator = drinkAmount.listIterator(0);
if(drinkListIterator.hasNext()){
System.out.println("\t" + "Drinks");
do {
System.out.println("\t" + drinkAmountIterator.next() + "\t\t" + "\t--\t" + "\t\t" + drinkListIterator.next());
}while (drinkListIterator.hasNext());
System.out.println(" ");
}else{
System.out.println("\t" + "Drinks");
System.out.println("\t" + "No drinks on your list");
System.out.println(" ");
}
}
public static void hygieneOutput (){
ListIterator<String> hygieneListIterator = hygieneList.listIterator(0);
ListIterator<Integer> hygieneAmountIterator = hygieneAmount.listIterator(0);
if(hygieneListIterator.hasNext()){
System.out.println("\t" + "Hygiene");
do {
System.out.println("\t" + hygieneAmountIterator.next() + "\t\t" + "\t--\t" + "\t\t" + hygieneListIterator.next());
}while (hygieneListIterator.hasNext());
System.out.println(" ");
}else{
System.out.println("\t" + "Hygiene");
System.out.println("\t" + "No hygiene products on your list");
System.out.println(" ");
}
}
public static void otherOutput (){
ListIterator<String> otherListIterator = otherList.listIterator(0);
ListIterator<Integer> otherAmountIterator = otherAmount.listIterator(0);
if(otherListIterator.hasNext()){
System.out.println("\t" + "Other products");
do {
System.out.println("\t" + otherAmountIterator.next() + "\t\t" + "\t--\t" + "\t\t" + otherListIterator.next());
}while (otherListIterator.hasNext());
System.out.println(" ");
}else{
System.out.println("\t" + "Other Products");
System.out.println("\t" + "No other products on your list");
System.out.println(" ");
}
}
public static void rewe (){
System.out.println("########################################");
System.out.println(" ");
System.out.println("Here is your REWE shopping list!");
System.out.println(" ");
System.out.println("\t" + "Qty" + "\t\t" + "\t--\t" + "\t\t" + "Product");
System.out.println(" ");
foodOutput();
drinkOutput();
hygieneOutput();
otherOutput();
System.out.println(" ");
System.out.println("########################################");
}
public static void lidl (){
System.out.println("########################################");
System.out.println(" ");
System.out.println("Here is your LIDL shopping list!");
System.out.println(" ");
System.out.println("\t" + "Qty" + "\t\t" + "\t--\t" + "\t\t" + "Product");
System.out.println(" ");
drinkOutput();
foodOutput();
otherOutput();
hygieneOutput();
System.out.println(" ");
System.out.println("########################################");
}
public static void edeka (){
System.out.println("########################################");
System.out.println(" ");
System.out.println("Here is your EDEKA shopping list!");
System.out.println(" ");
System.out.println("\t" + "Qty" + "\t\t" + "\t--\t" + "\t\t" + "Product");
System.out.println(" ");
foodOutput();
hygieneOutput();
otherOutput();
drinkOutput();
System.out.println(" ");
System.out.println("########################################");
}
public static void aldi (){
System.out.println("########################################");
System.out.println(" ");
System.out.println("Here is your ALDI shopping list!");
System.out.println(" ");
System.out.println("\t" + "Qty" + "\t\t" + "\t--\t" + "\t\t" + "Product");
System.out.println(" ");
drinkOutput();
foodOutput();
hygieneOutput();
otherOutput();
System.out.println(" ");
System.out.println("########################################");
}
public static void kaufland (){
System.out.println("########################################");
System.out.println(" ");
System.out.println("Here is your KAUFLAND shopping list!");
System.out.println(" ");
System.out.println("\t" + "Qty" + "\t\t" + "\t--\t" + "\t\t" + "Product");
System.out.println(" ");
foodOutput();
otherOutput();
drinkOutput();
hygieneOutput();
System.out.println(" ");
System.out.println("########################################");
}
}
解决方案
这个怎么样:
private static <T> String arrayListToString(ArrayList<T> list){
if (list.size() == 0){
return "empty\n";
}
StringBuilder sb = new StringBuilder();
for(T t : list){
sb.append(list instanceof ArrayList<String> ? t : Integer.toString(t));
sb.append('\n');
}
}
public static void writeFile() throws IOException{
FileWriter writer = new FileWriter("/Users/c-mon/IdeaProjects/final/src/shoppingList.txt");
writer.write("foodList\n");
writer.write(arrayListToString(GrocerieList.foodList));
writer.write("foodAmount\n");
writer.write(arrayListToString(GrocerieList.foodAmount));
writer.write("drinkList\n");
writer.write(arrayListToString(GrocerieList.drinkList));
writer.write("drinkAmount\n");
writer.write(arrayListToString(GrocerieList.drinkAmount));
writer.close();
}
推荐阅读
- laravel - 从中间件检查 Auth::user()
- android - 如何解决 Gradle 无法解决 Android 工作管理器的错误?
- android - Glide - 他们的文档中的“isImagePosition(位置)”是什么?
- php - 上传的文件必须具有有效的图像格式,但格式为:multipart/form-data;边界=------------749c9bf517f13444
- presto - 在 presto 中计算偏度和峰度
- lua - Add to table only 10 values
- php - wp_tag_cloud 在简单页面上显示结果
- gradle - 多模块项目中的gradle继承
- android - 打开预先存在的 github 库时,Android 上的 CMAKE 和 NDK 出错。(使用 Windows 10)
- javascript - 从连续数字生成数字序列