使用方法迭代多个预定义的ArrayLists

时间:2018-01-29 10:20:33

标签: java arrays arraylist

我已经定义了一些已经填充的ArrayLists。我有一个我想要在数组'tagArrays'中迭代的所有名称。是否有可能以与我相似的逻辑迭代它们中的每一个。我知道这段代码不起作用,但我不确定代码应该如何看。这是我的尝试:

这些已经填充并在main方法中定义。

CREATE UNIQUE INDEX ON users(email);

WITH usr AS (
  INSERT INTO users (email, state)
  SELECT 'abc@abc.abcd', 'Referred'
  ON CONFLICT(email)
  DO UPDATE SET email = users.email --this does empty UPDATE so that RETURNING gives us a row
  RETURNING *
)
UPDATE groups SET members = (
   SELECT ARRAY(
      SELECT DISTINCT unnest(members || array[(SELECT user_id FROM usr)]::bigint[]) ) )
WHERE group_id = INCOMING_GROUP_ID 
RETURNING group_id, members;

这是我正在使用的逻辑

ArrayList<String> KEYWORDS = new ArrayList<String>();
ArrayList<String> CUSTOMERS = new ArrayList<String>();
ArrayList<String> SYSTEM_DEPS = new ArrayList<String>();
ArrayList<String> MODULES = new ArrayList<String>();
ArrayList<String> DRIVE_DEFS = new ArrayList<String>();
ArrayList<String> PROCESS_IDS = new ArrayList<String>();

我希望每个循环每次都不同,例如一旦通过关键词,然后通过CUSTOMERS等。

3 个答案:

答案 0 :(得分:2)

您不能在Java中使用字符串值引用变量 你尝试做的事情可以用反射来完成 但是我并不鼓励它:它不那么可读,更脆弱/容易出错,而且随着经典的#34;方式。

作为替代方案,您可以提供varargs List<String>作为方法的最后一个参数:

public void genericForEachLoop(POITextExtractor te, String[] tagArrays, List<String>... lists ) {

    int i = 0;
    for(List<String> list : lists) {    

        System.out.println(tagArrays[i]);                   
        for (String item : list) {

            if (te.getText().contains(item)) {
                System.out.println(item);
            }

        }

     i++;
    }
}

以这种方式调用它:

genericForEachLoop(te, 
   new String[]{"KEYWORDS", "CUSTOMERS", "SYSTEM_DEPS", "MODULES", "DRIVE_DEFS", "PROCESS_IDS"},
   KEYWORDS, CUSTOMERS,SYSTEM_DEPS,MODULES,DRIVE_DEFS,PROCESS_IDS);

答案 1 :(得分:0)

而是创建 String 数组,您可以创建 ArrayList 数组,这将帮助您像下面一样动态迭代。

   public static void main(String[] args) 
   {
    ArrayList<String> KEYWORDS = new ArrayList<String>();
    ArrayList<String> CUSTOMERS = new ArrayList<String>();
    ArrayList<String> SYSTEM_DEPS = new ArrayList<String>();
    ArrayList<String> MODULES = new ArrayList<String>();
    ArrayList<String> DRIVE_DEFS = new ArrayList<String>();
    ArrayList<String> PROCESS_IDS = new ArrayList<String>();

    final String[] tagNames = {"KEYWORDS", "CUSTOMERS", "SYSTEM_DEPS", "MODULES", "DRIVE_DEFS", "PROCESS_IDS"};
    final List<String> tagNameList=Arrays.asList(tagNames);
    final ArrayList[] tagList = { KEYWORDS, CUSTOMERS, SYSTEM_DEPS, MODULES, DRIVE_DEFS, PROCESS_IDS };

    for (ArrayList<String> list : tagList) {
        for(String str :list){
            if(str.contains(""))
            {

            }

    }
  }

答案 2 :(得分:0)

我尝试过关注@@IDENTITY的事情。下面是您的代码的工作示例,我修改了一些代码。请检查。

var str="sdsdsd";
var hasDuplicates = (/([a-zA-Z]).*?\1/).test(str)        
alert("repeating string "+hasDuplicates);

我已取出Java 8并将其作为方法的输入提供,以便我可以更改它。只有我想迭代的那些数组才能传递它们。进一步建立在@Eran的答案之上我使用import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class MainClass { public static void main(String... args) { String[] strings = {"KEYWORDS", "CUSTOMERS", "SYSTEM_DEPS", "MODULES", "DRIVE_DEFS", "PROCESS_IDS"}; ArrayList<String> KEYWORDS = new ArrayList<String>(); KEYWORDS.add("goto"); ArrayList<String> CUSTOMERS = new ArrayList<String>(); CUSTOMERS.add("Royal Lotus"); ArrayList<String> SYSTEM_DEPS = new ArrayList<String>(); SYSTEM_DEPS.add("MAC BOOK"); ArrayList<String> MODULES = new ArrayList<String>(); MODULES.add("TETS MODULE"); ArrayList<String> DRIVE_DEFS = new ArrayList<String>(); DRIVE_DEFS.add("TEST DRIVE"); ArrayList<String> PROCESS_IDS = new ArrayList<String>(); PROCESS_IDS.add("-15153213"); Map<String, List<String>> mapOfLists = new HashMap<>(); mapOfLists.put("KEYWORDS", KEYWORDS); mapOfLists.put("CUSTOMERS", CUSTOMERS); mapOfLists.put("SYSTEM_DEPS", SYSTEM_DEPS); mapOfLists.put("DRIVE_DEFS", DRIVE_DEFS); mapOfLists.put("PROCESS_IDS", PROCESS_IDS); mapOfLists.put("MODULES", MODULES); genericForEachLoop(mapOfLists, strings); } public static void genericForEachLoop(Map<String, List<String>> mapOfLists, String[] listsToIterate) { Arrays.stream(listsToIterate).forEach((listName -> mapOfLists.get(listName).stream().forEach(str -> System.out.println(str)))); } } 来存储所有可用的String[]

请根据需要修改代码。我尝试使用Map<String, List<String>中的ArrayListstreams方法。