gpt4 book ai didi

java - 遍历数组 List 并在值不同时创建新的 ArrayLists,这甚至可能吗?

转载 作者:行者123 更新时间:2023-12-04 04:53:46 25 4
gpt4 key购买 nike

我对 Java 还很陌生,我偶然发现了一个我一生都无法弄清楚的问题。首先让我解释一下我要做什么,然后我将向您展示我目前拥有的代码。

我有一个 Web 服务,它返回一组数组(包括公司和业务字符串)。我想把它转换成一个字符串列表,我在下面的第一行代码中做了这个。然后我希望遍历列表,每次遇到公司的不同值时,我想创建一个新的 ArrayList 并将相关的业务线添加到新列表中。 webservice 的示例输出:80,80,64,64(这是预先排序的,因此相同的公司将始终组合在一起)相关联的 lob 将分别为 1,2,3,4。我想要的是: arraylist[0]: 1,2 arrayList[1]: 3,4

到目前为止我所拥有的:

    List coList = Arrays.asList(coArray);
//create list of lists
List<List<String>> listOfLists = new ArrayList<List<String>>();
String cmp = "";
for (int i=0;i<coList.size();i++){//loop over coList and find diff in companies
String currentCo = ((__LOBList)coList.get(i)).getCompany();
String currentLob = ((__LOBList)coList.get(i)).getLobNum();
if(i<coArray.length-1){
String nextCo = ((__LOBList)coList.get(i+1)).getCompany();
if((currentCo.equals(nextCo))){
//do nothing companies are equal
}else{
log("NOT EQUAL"); //insert logic to create a new array??
ArrayList<String> newList = new ArrayList<String>();
// for(int j=0;j<coList.size();j++){
newList.add( ((__LOBList)coList.get(i)).getLobNum());
// }


for(int k=0; k<listOfLists.size();k++){//loop over all lists
for(int l=0;l<listOfLists.get(k).size();l++){ //get first list and loop through

}
listOfLists.add(newList);
}

}
}


}

我的问题是它没有将元素添加到新的字符串数组中。它确实正确地循环了 coList 并且我在公司不相等的地方放置了一个日志,所以我知道我需要在哪里创建一个新的 arrayList 但我无法让它在我的生活中工作,请帮助!

最佳答案

是的,您可以这样做,但是用 Java 编写真的很烦人。注意:在像 Clojure 或 Haskell 这样的函数式编程语言中,这是一个非常简单的脑洞。它只是一个名为 group-by 的函数.在 Java 中,我会这样做:

  • 初始化列表列表。
  • 创建一个 last指针是一个列表。这包含您添加到的最后一个列表。
  • 只要“没有任何变化”,迭代原始数据并填充到最后。如果有变化,创建一个新的 last .

  • 我会告诉你如何:
    package com.sandbox;

    import java.util.ArrayList;
    import java.util.List;

    public class Sandbox {

    public static void main(String[] args) {
    ArrayList<String> rawInput = new ArrayList<String>();
    rawInput.add("80");
    rawInput.add("80");
    rawInput.add("60");
    rawInput.add("60");
    new Sandbox().groupBy(rawInput);
    }

    public void groupBy(List<String> rawInput) {
    List<List<String>> output = new ArrayList<>();
    List<String> last = null;

    for (String field : rawInput) {
    if (last == null || !last.get(0).equals(field)) {
    last = new ArrayList<String>();
    last.add(field);
    output.add(last);
    } else {
    last.add(field);
    }
    }

    for (List<String> strings : output) {
    System.out.println(strings);
    }
    }
    }

    这输出:
    [80, 80]
    [60, 60]

    当然,你可以按照其他人的建议去做,但这会改变你的数据类型。他们建议“适合工作的工具”,但他们没有提到 Guava 的 Multimap .如果您决定将数据类型更改为 map ,这将使您的生活更轻松。

    这是一个如何使用它的示例 from this article :
    public class MutliMapTest {
    public static void main(String... args) {
    Multimap<String, String> myMultimap = ArrayListMultimap.create();

    // Adding some key/value
    myMultimap.put("Fruits", "Bannana");
    myMultimap.put("Fruits", "Apple");
    myMultimap.put("Fruits", "Pear");
    myMultimap.put("Vegetables", "Carrot");

    // Getting the size
    int size = myMultimap.size();
    System.out.println(size); // 4

    // Getting values
    Collection<string> fruits = myMultimap.get("Fruits");
    System.out.println(fruits); // [Bannana, Apple, Pear]

    Collection<string> vegetables = myMultimap.get("Vegetables");
    System.out.println(vegetables); // [Carrot]

    // Iterating over entire Mutlimap
    for(String value : myMultimap.values()) {
    System.out.println(value);
    }

    // Removing a single value
    myMultimap.remove("Fruits","Pear");
    System.out.println(myMultimap.get("Fruits")); // [Bannana, Pear]

    // Remove all values for a key
    myMultimap.removeAll("Fruits");
    System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!)
    }
    }

    关于java - 遍历数组 List 并在值不同时创建新的 ArrayLists,这甚至可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17052941/

    25 4 0