【问题标题】:OpenCSV - Convert List<String[]> to List<Integer> list? [duplicate]OpenCSV - 将 List<String[]> 转换为 List<Integer> 列表? [复制]
【发布时间】:2015-11-03 16:04:15
【问题描述】:

是否可以将 List String[] 转换为 ListInteger 列表?

我正在创建一个程序,我需要一些将 CSV 转换为 int 的方法,以便我总结一下。

@Path("/values")
public class values {

int totalSum = 0;
int value = 0;

List<Integer> list = new ArrayList<Integer>();

@GET
@Produces(MediaType.TEXT_PLAIN)
public int getSum() throws IOException {
    CSVReader reader = new CSVReader(new FileReader("yourfile.csv"));
    List<String[]> read = reader.readAll();
    //need to convert List<String[]> to List<Integer> list
    return sum.sum(list, totalSum);
}

@POST
public String addValue() throws IOException {
    String valueString = Integer.toString(value);
    CSVWriter writer = new CSVWriter(new FileWriter("yourfile.csv"), ',');
    String[] entries = valueString.split(",");
    writer.writeNext(entries);
    writer.close();
    return "ok";  
}  

@DELETE
@Produces(MediaType.TEXT_PLAIN)
public String deleteList() {
    list.clear();
    return "ok";
}

}

sum.java

@Path("/values/sum")
public class sum {

public static int sum(List<Integer> list, int totalSum) {
    for(int i : list) {
          totalSum += i;
          }
    return totalSum;
}

}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>PACKAGENAME</display-name>
 <servlet>
    <servlet-name>Jersey REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
     <!-- Register resources and providers under com.vogella.jersey.first package. -->
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>PACKAGENAME</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Jersey REST Service</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>
</web-app> 

也许有更好的方法来解决这个问题?我正在实施 CSV 作为每次执行 GET 时维护数据的一种方式。

【问题讨论】:

  • 尝试在您的sum() 中仅使用Integer.valueOf(String)?然后它可能需要一个List&lt;String&gt;,看起来它需要更多的工作,因为它是一个List&lt;String[]&gt;,但这可能是你最好的选择。

标签: java rest csv export-to-csv opencsv


【解决方案1】:
public static int sum(List<String[]> source, int totalSum)
{
    for(String[] arr: source)
    {
        for(String s: arr) totalSum += Integer.valueOf(s);
    }
}

【讨论】:

  • 似乎可以正常工作而不会引发任何错误。您是否偶然有过使用 OpenCSV 的经验?我不知道 CSV 是在哪里创建的。
  • 这只是直接的 java 逻辑,而不是 OpenCSV 逻辑。不熟悉 OpenCSV。
【解决方案2】:

直接使用java8 stream API 的总和:

private static int sum(List<String[]> stringArrayList){
    return stringArrayList.stream().flatMap(l -> Arrays.stream(l))
            .mapToInt(str -> Integer.valueOf(str)).sum();
}

public static void main(String args[]) {
    List<String[]> stringArrayList = Lists.newArrayListWithCapacity(2);
    String[] sArray1 = { "1", "5" };
    stringArrayList.add(sArray1);
    String[] sArray2 = { "53", "49" };
    stringArrayList.add(sArray2);

    System.out.println(sum(stringArrayList));
}

【讨论】:

    【解决方案3】:

    您有一个数组字符串,您可以通过迭代数组的每个元素将其解析为 int:

    String[] entries = valueString.split(",");
    long sum = 0;
    
    for(String entry : entries)
    {
        sum += Long.parseLong(entry.trim());
    }
    

    我使用 long 而不是 int,因为有时整数字段的总和会超过整数类型限制。所以,为了更安全,花点时间。

    不要忘记使用 trim 从值中删除空格,否则 java 将抛出 NumberFormatException。

    假设:字符串数组的所有元素都包含整数值,否则会抛出异常。

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 2022-09-30
      • 2012-05-29
      • 2013-08-03
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多