2015-08-11 3 views
0

Можно ли преобразовать List String [] в список ListInteger?OpenCSV - Список преобразований <String[]> в список <Integer> список?

Я создаю программу, и мне нужно каким-то образом преобразовать 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.

+0

Пробовал в вашей 'sum()' просто используя 'Integer.valueOf (String)'? Тогда он может принять «Список ', похоже, что потребуется немного больше работы, чем просто, поскольку это «Список », но это, вероятно, будет вашим лучшим выбором в любом случае. –

ответ

0

использованием 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)); 
} 
0
public static int sum(List<String[]> source, int totalSum) 
{ 
    for(String[] arr: source) 
    { 
     for(String s: arr) totalSum += Integer.valueOf(s); 
    } 
} 
+0

Появляется для работы без ошибок. У вас есть опыт работы с OpenCSV случайно? Я не знаю, где создается CSV. –

+0

Это просто прямая логика Java, а не логика OpenCSV. Не знаком с OpenCSV. –

0

У вас есть строка массива, который вы можете разобрать его в междунар через итерации каждый элемент массива:

String[] entries = valueString.split(","); 
long sum = 0; 

for(String entry : entries) 
{ 
    sum += Long.parseLong(entry.trim()); 
} 

Я использовал long вместо int, потому что иногда бывает, что сумма целочисленного поля пересекает предел целочисленного типа. Итак, займитесь долгой безопасностью.

Не забудьте использовать обрезку, чтобы удалить пустое пространство из значения, иначе java будет вызывать исключение NumberFormatException.

Предположения: все элементы массива строк содержат целочисленное значение, иначе оно выдает исключение.

Смежные вопросы