将字符串arraylist存储到双arraylist中?

我有一个字符串arraylist,其数字如[“51,073”,“51,074”,“51,073”]现在我想将其转换为Double ArrayList并计算数组列表中数字的总和。

这是代码:

 private ArrayList totals = new ArrayList(); private ArrayList demototal = new ArrayList(); String total = itemData.getString(ParseBarcode.KEY_TOTAL); totals.add(total); /*converting all values from totals array to Double and add to arraylist demototal*/ for (int i = 0; i < totals.size(); i++) { final String value = totals.get(i); double total_ary = Double.parseDouble(value); demototal.add(total_ary); } String amount = ""+setArrayListElement(demototal); textViewSum.setText(amount);//set total text to amount //calculate amount here we pass setArrayListElement as Double arraylist private Double setArrayListElement(ArrayList inArray) { Double amount = 0.0d; for (int i = 0; i < inArray.size(); i++) { amount = amount + Double.valueOf((Double) inArray.get(i)); } return amount; } 

这给了我java.lang.NumberFormatException: Invalid double: "51,073"exception。

为了更清楚,我添加了一些代码。

  private void showItem(String json) { String itembarcode = ""; String itemdesc = ""; String weight = ""; String rate = ""; String making = ""; String netrate = ""; String total = ""; try { JSONObject jsonObject = new JSONObject(json); JSONArray result = jsonObject.getJSONArray(ParseBarcode.JSON_ARRAY); JSONObject itemData = result.getJSONObject(0); itembarcode = itemData.getString(ParseBarcode.KEY_BARCODE); itemdesc = itemData.getString(ParseBarcode.KEY_DESC); weight = itemData.getString(ParseBarcode.KEY_WEIGHT); rate = itemData.getString(ParseBarcode.KEY_RATE); making = itemData.getString(ParseBarcode.KEY_MAKING); netrate = itemData.getString(ParseBarcode.KEY_NETRATE); total = itemData.getString(ParseBarcode.KEY_TOTAL); } catch (JSONException e) { e.printStackTrace(); } //table started TableLayout.LayoutParams tableParams = new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT); TableRow.LayoutParams rowParams = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 1f); rowParams.setMargins(16, 0, 16, 0); TableLayout tableLayout = new TableLayout(AddInvEst.this); tableLayout.setLayoutParams(tableParams); TableRow newRow = new TableRow(AddInvEst.this); newRow.setLayoutParams(tableParams); barCode = new TextView(AddInvEst.this); barCode.setLayoutParams(rowParams); barCode.setGravity(Gravity.CENTER); itemDesc = new TextView(AddInvEst.this); itemDesc.setLayoutParams(rowParams); itemDesc.setGravity(Gravity.CENTER); weightLine = new TextView(AddInvEst.this); weightLine.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.75f)); weightLine.setGravity(Gravity.CENTER); rateAmount = new EditText(AddInvEst.this); rateAmount.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f)); rateAmount.setGravity(Gravity.CENTER); rateAmount.addTextChangedListener(rateTextWatcher); makingAmount = new EditText(AddInvEst.this); makingAmount.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f)); makingAmount.setGravity(Gravity.CENTER); makingAmount.addTextChangedListener(mkAmountTextWatcher); netRate = new TextView(AddInvEst.this); netRate.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT, 0.5f)); netRate.setGravity(Gravity.CENTER); netrates.add(netrate); itemtotal = new TextView(AddInvEst.this); itemtotal.setLayoutParams(rowParams); itemtotal.setGravity(Gravity.CENTER); totals.add(total); //converting all values from totals array to Double and add to arraylist demototal for (int i = 0; i < totals.size(); i++) { final String value = totals.get(i); double total_ary = Double.parseDouble(value.replace(",",".")); demototal.add(total_ary); } barCode.setText(itembarcode); itemDesc.setText(itemdesc); weightLine.setText(weight); rateAmount.setText(rate); makingAmount.setText(making); netRate.setText(netrate); itemtotal.setText(total); String amount = ""+setArrayListElement(demototal); textViewSum.setText(amount);//set total text to amount newRow.addView(barCode); newRow.addView(itemDesc); newRow.addView(weightLine); newRow.addView(rateAmount); newRow.addView(makingAmount); newRow.addView(netRate); newRow.addView(itemtotal); itemTable.addView(newRow); } //calculate amount here we pass setArrayListElement as Double arraylist private Double setArrayListElement(ArrayList inArray) { Double amount = 0.0d; for (int i = 0; i < inArray.size(); i++) { amount = amount + Double.valueOf((Double) inArray.get(i)); } return amount; } 

这是textwatcher的代码并计算netrate和item total。

 private void calculateAndShow(double wt, double rt, double mk) { String w = weightLine.getText().toString(); wt = Double.parseDouble(w); double NetRate = rt + mk; double Total = (NetRate / 10) * wt; netRate.setText(NetRate + ""); itemtotal.setText(Total + ""); } private TextWatcher rateTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { String rate = rateAmount.getText().toString(); rt = Double.parseDouble(rate); calculateAndShow(wt, rt, mk); rates.add(rate); } }; private TextWatcher mkAmountTextWatcher = new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { String mkAmt = makingAmount.getText().toString(); mk = Double.parseDouble(mkAmt); calculateAndShow(wt, rt, mk); mkCharges.add(mkAmt); } }; 

你不能使用a,在你的值中解析为double

尝试:

 double total_ary = Double.parseDouble(value.replace(",",".")); 
  ArrayList hello = new ArrayList<>(); double[] bye = new double[hello.size()]; for (int i = 0; i < hello.size(); ++i) { bye[i] = Double.parseDouble(hello.get(i)); } 

Double.parseDouble(value) replace之前用“。” Double.parseDouble(value) replace “,”。

尝试:

 List list2 = totals.stream().map(c -> c.replace(",",".")).map(Double::parseDouble).collect(Collectors.toList()); Double sum = list2.stream().reduce((x,y)->x+y).get(); 

或者如果你只想要总和:

 Double sum = totals.stream.map(c -> c.replace(",",".")).map(Double::parseDouble).reduce((x,y)->x+y).get();