从 ArrayList 检索数据时出现逻辑错误

用户11758955

我正在尝试从ArrayList第一个整数值中检索数据并求和。

我尝试了多种方法来做到这一点,但无法获得预期的结果。我知道我的逻辑有一些错误。但我无法得到预期的结果。请帮我弄清楚。

int sum = 0;

List<String> sum_list = new ArrayList<>();
List<String> list21 = new ArrayList<>();
list21.add("1 tbsp olive oil plus a drizzle to serve (optional)");
list21.add("1 tbsp olive oil plus a drizzle to serve (optional)");
list21.add("2 tbsp pesto");
list21.add("2 tbsp pesto");
list21.add("2 tbsp pesto");
list21.add("2 tbsp pesto");
int i = 0;
while (i < list21.size()) {

    String str1 = list21.get(i).trim().replaceAll("[0-9]", "");
    String str2 = list21.get(i + 1).trim().replaceAll("[0-9]", "");

    if (str1.equals(str2)) {

        sum += Integer.valueOf(list21.get(i).replaceFirst(".*?(\\d+).*", "$1"))
                + Integer.valueOf(list21.get(i).replaceFirst(".*?(\\d+).*", "$1"));
        // System.out.println("Sum=" + sum);
        try {
            if (!sum_list.isEmpty() && !sum_list.get(sum_list.size() - 1).trim().replaceAll("[0-9]", "").contains(str2)) {
                sum_list.add(sum + " " + str1);
                sum = 0;
            } else sum_list.add(sum + " " + str1);

        } catch (Exception e) {
        }
    }

    i = i + 2;
}
System.out.println(sum_list.toString());

预期结果

2 汤匙橄榄油加细雨(可选),10 汤匙香蒜酱

代码输出

2汤匙橄榄油加细雨(可选),6汤匙香蒜酱,4汤匙香蒜酱

文卡塔克里希南

我已经理解您的逻辑并对代码进行了一些更改。这是您可以替换的代码块,while 循环。

for(String ops : list21){

    if(sum_list.size()==0){
        sum_list.add(ops);
    }
    else{
         String str= ops.trim().replaceAll("[0-9]", "");
         String str_from_list=sum_list.get(sum_list.size()-1).replaceAll("[0-9]", "").trim();

         if(str_from_list.contains(str.trim())){
            System.out.println("found");
            int val= Integer.valueOf(sum_list.get(sum_list.size()-1).replaceFirst(".*?(\\d+).*", "$1"));
            int to_add = Integer.valueOf(ops.replaceFirst(".*?(\\d+).*", "$1"));
            int total = val+to_add;
            sum_list.set(sum_list.size()-1,total+" "+str_from_list);
         }
         else{
            sum_list.add(ops);  
         }
    }
System.out.println(sum_list);


}

注意事项

  1. 在需要时删除打印语句。
  2. 这是在记住只有顺序操作必须聚合的假设下完成的。

[编辑]

要检查它是否在列表中没有顺序的情况下存在,请使用下面的代码块。

for(String ops : list21){

    if(sum_list.size()==0){
        sum_list.add(ops);
    }
    else{
        String str= ops.trim().replaceAll("[0-9]", "");
        int index=-1;
        String str_from_list=null;
        for(String str_from_l : sum_list){
            str_from_list=str_from_l.replaceAll("[0-9]", "").trim();

            if(str_from_list.contains(str.trim())){
                index=sum_list.indexOf(str_from_l);
                break;
            }
        }


         if(index!=-1){
           // System.out.println("found");
            int val= Integer.valueOf(sum_list.get(index).replaceFirst(".*?(\\d+).*", "$1"));
            int to_add = Integer.valueOf(ops.replaceFirst(".*?(\\d+).*", "$1"));
            int total = val+to_add;

            sum_list.set(index,total+" "+str_from_list);
         }
         else{
            sum_list.add(ops);  
         }
    }



}
System.out.println(sum_list);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章