Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lambda Java 8-如何将字符串列表转换为日期列表_Java_Lambda - Fatal编程技术网

Lambda Java 8-如何将字符串列表转换为日期列表

Lambda Java 8-如何将字符串列表转换为日期列表,java,lambda,Java,Lambda,是否有一种方法可以将字符串列表转换为新的日期列表(在流式传输和收集时) 我的尝试: 我定义了一个SimpleDataFormat,并试图在下面的代码中使用它,但我无法让它一起工作 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.mm.yyyy"); ArrayList<Date> dateList = stringList.stream() .filter(s -> s.st

是否有一种方法可以将字符串列表转换为新的日期列表(在流式传输和收集时)

我的尝试:

我定义了一个SimpleDataFormat,并试图在下面的代码中使用它,但我无法让它一起工作

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.mm.yyyy");

ArrayList<Date> dateList = stringList.stream()
              .filter(s -> s.startsWith("<"))
              .collect(Collectors.toList());
SimpleDataFormat SimpleDataFormat=新的SimpleDataFormat(“dd.mm.yyyy”);
ArrayList dateList=stringList.stream()

.filter(s->s.startsWith(“使用
map
方法

final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.mm.yyyy");

final List<Date> dateList = strings.stream()
                                   .filter(s -> s.startsWith("<"))
                                   .map(s -> { 
                                          try {
                                             simpleDateFormat.parse(s));
                                          } catch (final ParseException e) {
                                             throw new RuntimeException("Parse failed", e);
                                          }
                                    }).collect(Collectors.toList());
final SimpleDateFormat SimpleDateFormat=new SimpleDateFormat(“dd.mm.yyyy”);
最终列表日期列表=strings.stream()

.filter(s->s.startsWith(“您只需编写一个函数,将
字符串
映射到
日期
对象,如下所示:

public static void main(String[] args) {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd.MM.yyyy");
    List<String> stringList = new ArrayList<>();
    stringList.add("10.10.2014");

    Function<String, Date> function = new Function<String, Date>() {

        @Override
        public Date apply(String s) {
            try {
                return simpleDateFormat.parse(s);
            } catch (ParseException e) {
                throw new RuntimeException(e);
            }
        }
    };

    List<Date> collect = stringList.stream().map(function).collect(Collectors.<Date>toList());

    System.out.println(collect);
}
publicstaticvoidmain(字符串[]args){
SimpleDataFormat SimpleDataFormat=新SimpleDataFormat(“dd.MM.yyyy”);
List stringList=新建ArrayList();
stringList.添加(“2014年10月10日”);
函数=新函数(){
@凌驾
公共日期应用(字符串s){
试一试{
返回simpleDataFormat.parse;
}捕获(解析异常){
抛出新的运行时异常(e);
}
}
};
List collect=stringList.stream().map(function).collect(Collectors.toList());
系统输出打印项次(收集);
}

由于您使用的是
Java8
,因此可以使用新的
DateTime
API

    List<String> dateStrings = Arrays.asList("12.10.2016", "13.10.2016", "14.10.2016");
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
    List<LocalDate> localDates = dateStrings.stream().map(date -> LocalDate.parse(date, formatter)).collect(Collectors.toList());
    System.out.println(localDates);

使用此定义的
SimpleDataFormat
转换字符串可能是一个好主意。您可以过滤一些内容,仅此而已。以下是有关流中类型转换的几个示例。
map
就是您要查找的内容。错误1:无法从列表转换为ArrayList。错误2:未处理的异常类型ParseExceptionStill不会编译。
toList
返回对象的
List
,而不是
ArrayList
这就是我复制OP;)
return null
当遇到坏数据时可能是个坏主意。因为您使用的是Java 8功能,您创建匿名类而不是lambda表达式块有什么原因吗?更正了null。另外,没有具体原因。我更喜欢匿名类,只是为了可读性。
    List<String> dateStrings = Arrays.asList("12.10.2016", "13.10.2016", "14.10.2016");
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
    List<LocalDate> localDates = dateStrings.stream().map(date -> LocalDate.parse(date, formatter)).collect(Collectors.toList());
    System.out.println(localDates);
[2016-10-12, 2016-10-13, 2016-10-14]