【问题标题】:How to extract dates from an Object in Java如何从Java中的对象中提取日期
【发布时间】:2021-07-12 05:07:59
【问题描述】:

我应该从 Object 中提取日期,但编译器正确地告诉我 getDate() 没有在 Object 上定义。我该如何定义它?如果我不能定义它,我做错了什么?我应该使用 Hibernate 库还是流?谢谢你。 要将 Object 转换为 DateRange [] 我做了两个步骤:从 Object -> MyObject 然后从 MyObject-> 日期范围 []

class MyObject extends Object {

Date Lower_Date;
Date Upper_Date;

private MyObject(Date Lower_Date, Date Upper_Date) {
    this.Lower_Date = Lower_Date;
    this.Upper_Date = Upper_Date;
}

public Date getLowerDate() {
    return this.Lower_Date;
}

public Date getUpperDate() {
    return this.Upper_Date;
}

}

 ...

public class Tabella_Parlamentari {

public static DateRange getDateRange(Date a, Date b) {
    return new DateRange(a,b);
}   

...

try {   
         
                 if(periodo_carica == null)
                      periodo_carica = null;
                  else {
                      Array pgArray = rs.getArray("periodo_carica"); 
                      
                    Object obj = pgArray.getArray();
                    
                    List<Object> objlist = new ArrayList<Object>();
                    objlist.add(obj);               
                    
                    List<MyObject> myobjlist = new ArrayList<MyObject>();
                    myobjlist = objlist.stream()
                            .filter(e -> e != null)
                            .map(o -> (MyObject) obj.getDate()) //prima estrai tutte le date
                            .collect(Collectors.toList());
                    
                        List<DateRange> periodo_carica2 = new ArrayList<DateRange>();
                            periodo_carica2 = 
                                     myobjlist.stream()
                                     .filter(e -> e != null)
                                     .map(o -> getDateRange(o.getLowerDate(),o.getUpperDate()))
                                     .collect(Collectors.toList());
                            
                        periodo_carica = periodo_carica2.toArray(DateRange[]::new);         
                   
                     }
                                
              /*  Stream.Builder<DateRange> dateStreamBuilder = Stream.builder();

              Date[] date_intervallo = periodo_carica2.stream().toArray(Date[]::new);
             for(int i=0; i< periodo_carica2.size(); i++) {

                 periodo_carica2.stream().forEach(d -> DateRange(d.getLowerDate(), 
         d.getUpperDate()));
                 dateStreamBuilder.accept((DateRange)periodo_carica[i]);
           */
                // Stream<DateRange> dateStream = dateStreamBuilder.build();
             
            }
            catch(NullPointerException obj) {
                periodo_carica = null;
          }     

【问题讨论】:

  • 你的班级MyObjectLower_DateUpper_Date)中有两个日期类型的字段。拨打getDate()时你想回哪一个?
  • 如果我必须提取日期然后构造范围,然后 getDate () 一次读取一个,它应该将它们全部返回,就好像它是一个日期数组,即 Date [ ],除非你可以直接将 Object 转换为 DateRange []
  • 我建议你不要使用Date。该课程设计不良且早已过时。如果是约会,请改用java.time, the modern Java date and time API中的LocalDate

标签: hibernate methods stream resultset date-range


【解决方案1】:

我不知道你的DateRange 类,但在我看来你可以这样写你的方法。

public DateRange getDate() {
    return new DateRange(Lower_Date, Upper_Date);
}

如果在MyObjectDateRange 中都使用来自现代Java 日期和时间API 的java.time 中的LocalDate,而不是老式的java.util.Date,同样的方法仍然有效。

【讨论】:

  • .map(o -> (MyObject) obj.getDate()) 此行产生错误:未为 Object 类型定义 getDate () 方法。所以 obj 的类型是 Object 而不是 MyObject。我不知道……但你在开玩笑吗?
  • 对不起,我之前没有看过你的代码的后半部分。是的,我可以看到objo 都是Object 类型。我无法理解你希望你的代码做得足够好,我可以提出替代方案,抱歉。
猜你喜欢
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 2018-10-12
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多