使用java lambda表达式

使用java lambda表达式,java,lambda,java-8,java-stream,Java,Lambda,Java 8,Java Stream,我从Java8开始,我想知道是否可以将带有try-catch子句的循环转换为lambda函数? 下面是我想转换成的方法代码: for (File f: files) { JSONOject obj; try (FileWriter fw= new FileWriter("path.csv")) { obj= (JSONObject) parser.parse(new FileWriter(f)); readOBJ(valueType,resu

我从Java8开始,我想知道是否可以将带有try-catch子句的循环转换为lambda函数? 下面是我想转换成的方法代码:

for (File f: files) { 
    JSONOject obj; 
    try (FileWriter fw= new FileWriter("path.csv")) {
        obj= (JSONObject) parser.parse(new FileWriter(f)); 
        readOBJ(valueType,results,obj); 
        results.put(day, new JobClass(day,work, time,description)); 
        Date d= results.keySet();
        Calendar c= Calendar.getinstance(); 
        c.setTime(d); 
        Map<Date, JobClass> daysList= new HashMap<>(); 
        j.insertDaysList(results,c,fw,daysList);
        results.putAll(daysList); 
        j.resSort(results,resDayList); 
    } catch (IOException ex) {
        e.printStacktrace();
       }
} 
return resDaysList; 

假设您希望将文件转换为流,那么这很容易完成。目前,循环内容甚至不会抛出未捕获的异常,因此,这里没有困难,尽管我建议首先将其重构为自己的方法。

因为Java中的lambda表达式只是一种方便地将单个抽象方法SAM接口的实现作为匿名对象提供的方法,而标准流接口为内部迭代提供了forEach方法,您可以在表达式中封装几乎所有您想要的内容


forEachConsumerSo在这种情况下,我的列表应该是文件列表文件,对象使用者是文件f?是的,也许最好将代码传递到它自己的方法中。我不知道您使用的是什么解析器,但将编写器传递给解析器看起来很不寻常……行日期d=results.keySet;看起来也不是很有说服力。现在还完全不清楚你返回的resDaysList的结果来自哪里。换句话说,你吐出一些不工作的代码,并要求我们将其转换为lambda函数。首先,我们不是一个代码重写服务,其次,将其转换为lambda函数没有任何好处。尝试将其转换为正确的代码可能会获得更多的回报。
List<String> someList = Arrays.asList("example", "of", "lambda", "code");

// lambda style
someList.stream().forEach( item -> {
  try {
    System.out.println(item.toString());
  } catch (Exception e) {
    e.printStackTrace();
  }
});

// anonymous object style
someList.stream().forEach(new Consumer<String>() {

  @Override
  public void accept(String s) {
    try {
      System.out.println(item.toString());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

});