Java:将List <List <String >>转换为List <List <Double >>

时间:2019-12-04 10:44:27

标签: java collections

我有一个来自Filereader的列表列表(字符串),如何将其转换为一个列表列表(双精度):我必须返回line-Array的第一个值的列表。谢谢。

docker-compose run

3 个答案:

答案 0 :(得分:2)

您可以使用以下方法将所有String列表转换为Double

public static <T, U> List<U> convertStringListTodoubleList(List<T> listOfString, Function<T, U> function) 
   { 
       return listOfString.stream() 
           .map(function) 
           .collect(Collectors.toList()); 
   }

调用方法

List<Double> listOfDouble = convertStringListTodoubleList(listOfString,Double::parseDouble);

答案 1 :(得分:0)

java.util.stream.Collectors为此提供了一个方便的方法。请参考以下代码片段。您可以用逻辑替换

    Map<String, Integer> map = list.stream().collect(
            Collectors.toMap(kv -> kv.getKey(), kv -> kv.getValue())); 

答案 2 :(得分:0)

我不确定您到底想获得什么作为输出,但是在任何情况下都没有那么复杂。假设您有这样的东西:

[["1", "2"],
 ["3", "4"]]

如果要将所有第一个元素都设为Double [1, 3](假设第一个元素始终存在):

        List<Double> firstAsDouble = allLines.stream()
            .map(line -> line.get(0))
            .map(Double::parseDouble)
            .collect(Collectors.toList());

如果相反,您只想将所有String值转换为Double并保持结构不变:

        List<List<Double>> matrix = allLines.stream()
            .map(line -> line.stream().map(Double::parseDouble).collect(Collectors.toList()))
            .collect(Collectors.toList());

或者,如果您想输出具有所有值([1, 2, 3, 4])的单个数组,则可以将其平面映射:

        List<Double> flatArray = allLines.stream()
            .flatMap(line -> line.stream().map(Double::parseDouble))
            .collect(Collectors.toList());