标签: java-8

什么是通用区域设置数据存储库 (CLDR) - JDK 9

我想了解 CLDR,因为它在 JDK-9 中得到了增强。

JDK 9 CLDR - 根据 JDK 文档

在 JDK 9 中,默认区域设置数据使用从 Unicode 联盟的公共区域设置数据存储库 (CLDR) 派生的数据。因此,用户可能会看到区域设置敏感服务行为和/或翻译的差异。

有人可以帮助我理解这一点并让我知道它在 JDK8 Date API 中的作用是什么吗?

java localization java-8 java-9 cldr

2
推荐指数
1
解决办法
2192
查看次数

TreeMap 中的条目不是公开的;无法从外部包访问

我已将 android 项目的源兼容版本更改为 1.8 以支持 Java 8 功能。但更改后项目未构建。它显示以下错误:

错误:TreeMap 中的条目不是公开的;无法从外部包访问

for (TreeMap.Entry<Integer, DynamicListItem> entry : dynamicListItemTreeMap.entrySet()) 
Run Code Online (Sandbox Code Playgroud)

android java-8

2
推荐指数
1
解决办法
2546
查看次数

将 Java Stream 映射到以对象为键的对象映射

我有一些课程,并且正在 List<WorkDay> 中做一些工作,其中包含一个 List<LedgerItem>,除了一部分之外,我一切正常。嗯,它有效,但不完全是我想要的。

public Stream<Map<WorkDay, Set<LedgerItem>>> adjustWorkDays(List<WorkDay> workDays) {        
    return workDays.stream()
            .sorted((d1,d2) -> d1.getCreated().compareTo(d2.getCreated()))
            .map(day -> createGroupByWorkDay(day))/*need it to collect here*/;
}
Run Code Online (Sandbox Code Playgroud)

如果您可以看到返回类型是,Stream<Map<WorkDay, Set<LedgerItem>>>但我想将其映射到流之外,就像Map<WorkDay, Set<LedgerItem>>使用收集器一样,但似乎无法获取Collectors.toMap()语法来执行除中断之外的任何操作。

就像我说的,一切都很完美,所以我不需要映射之外的任何东西来工作。

仅供参考:已经createGroupByWorkDay返回Map<WorkDay, Set<LedgerItem>>,但只接受一个,WorkDay因为这是一个要求,所以我无法更改其执行方式......

提前致谢

编辑:所以我所拥有的未在此处列出的方法createGroupByWorkDay可以按预期完美运行,并且永远不会改变。它返回正确的类型,Map<WorkDay, Set<LedgerItem>>但只有一个 WorkDay 的签名,就像createGroupByWorkDay(WorkDay day)原始评论中的问题方法一样,使用该方法来构建按 WorkDay 分组并返回的单个地图,但可能有 N 个这样的地图,因此方法public Stream<Map<WorkDay, Set<LedgerItem>>> adjustWorkDays(List<WorkDay> workDays)应该返回收集到收集器中的一张地图中的所有地图。如果那有意义的话?

java-8 java-stream collectors

2
推荐指数
1
解决办法
7778
查看次数

如何在java 8中初始化二维数组

在 Java 8 版本之前,我们可以使用 for 循环初始化二维数组,如下所示。如何在 JDK 1.8 中使用 lambda 表达式执行以下操作?

int[][] board = new int[3][3];
int v = 1;
for (int i = 0; i < board.length; i++) {

    for (int j = 0; j < 3; j++) {

        board[i][j] = v;
        v++;
        System.out.println(v);
    }
}
System.out.println(Arrays.deepToString(board));
Run Code Online (Sandbox Code Playgroud)

基本上,我正在寻找如下所示的数组

[[1,6],[2,7],[3,8],[4,9]]
Run Code Online (Sandbox Code Playgroud)

java arrays java-8 java-stream

2
推荐指数
1
解决办法
8735
查看次数

Apache Commons CSV 解析器:无法读取值

我正在使用 apache commons CSV 解析器将 CSV 转换为地图。在地图中,我无法通过 intellij 调试器读取某些值。如果我手动输入map.get(“key”),则该值为空。但是,如果我从地图上复制粘贴密钥,我就会获取数据。无法理解出了什么问题。任何指示都会有所帮助。谢谢

这是我的 CSV 解析器代码:

 private CSVParser parseCSV(InputStream inputStream) {
        System.out.println("What is the encoding "+ new InputStreamReader(inputStream).getEncoding());
        try {
            return new CSVParser(new InputStreamReader(inputStream), CSVFormat.DEFAULT
                    .withFirstRecordAsHeader()
                    .withIgnoreHeaderCase()
                    .withSkipHeaderRecord()
                    .withTrim());
        } catch (IOException e) {
            throw new IPRSException(e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

java-8 apache-commons-csv

2
推荐指数
1
解决办法
2584
查看次数

使用 TimeZone 的 Calendar.getInstance 与 new Date()

我在我的应用程序中编写了一个实用程序,它接受时区并返回一个日期(java.util.Date),如下所示 -

// Inside MyDateHelper.java
public static java.util.Date getTimeForTimeZone(String timeZoneId)
{
    final Date currentDate = Calendar.getInstance(TimeZone.getTimeZone(timeZoneId)).getTime();
    return currentDate;
}
Run Code Online (Sandbox Code Playgroud)

我在互联网上进行了研究,发现 Date 中没有任何时区信息。相反,它是一个从 1970 年开始的长值的包装器。所以,我的问题是我是否必须获取当前发生事务的日期时间时刻以存储在日期字段(类型为 java.util.Date)中),这个实用程序有什么用吗?

出于所有实际目的,这两行代码是否实现了相同的目的?

transactionEntry.setTime(MyDateHelper.getTimeForTimeZone("UTC+7:00"));
Run Code Online (Sandbox Code Playgroud)

或者

transactionEntry.setTime(new Date());
Run Code Online (Sandbox Code Playgroud)

我还检查了新的 Java 8 Time API,但就我的目的而言,我认为这样做也是一种矫枉过正,并且没有取得更多成果new Date()-

Date date4 = new Date();
LocalDateTime localDate = date4.toInstant().atZone(ZoneId.of("UTC+07:00")).toLocalDateTime();
final ZonedDateTime dateWithZone = localDate.atZone(ZoneId.of("UTC+07:00"));
Date dateOutput = Date.from(dateWithZone.toInstant());
transactionEntry.setTime(dateOutput);
Run Code Online (Sandbox Code Playgroud)

整个目的是捕获时区事务发生的时间,但我只能将时间存储为 java.util.Date。无论交易发生在哪个时区,Date 都能够正确捕获时间的瞬间,对吧?有人可以证实这种理解是正确的吗?

java timezone datetime java-8 java-time

2
推荐指数
1
解决办法
2626
查看次数

解析所有 ISO 8601 DateTime 格式 Java 1.8

我在我的项目中使用 spring boot 和 Java 1.8。我们从外部系统接收到一个需要解析的日期字符串。问题是外部系统可以发送任何符合 ISO 8601 的 DateTime,我们需要解析任何出现的 ISO 8601 格式字符串。谁能建议我该怎么做?有没有库可以做到这一点?

传递的两种日期时间格式是 2018-11-01T16:26:15+0100、2018-10-31T08:27:00.0000000Z,还可以有更多。

我在 StackOverflow 上发现了一些建议使用 Joda Time 转换器的帖子,但我无法用它解析日期 2018-10-31T08:27:00.0000000Z。

java datetime iso8601 datetime-parsing java-8

2
推荐指数
1
解决办法
1517
查看次数

将 Duration.ofDays(1) 和 period.ofDays(1) 添加到夏令时附近的 ZonedDateTime 之间的区别

美国/东部时区夏令时于 11 月 1 日凌晨 2 点结束。结果,凌晨 2 点变成了凌晨 1 点。

我无法理解下面给出的代码中的以下内容:

  1. 为什么第 2 行显示时间 09:00,而不是 10:00(添加 1 天)?
  2. 为什么第 4 行显示时间 10:00,而不是 09:00(添加 24 小时)?

    LocalDateTime ld = LocalDateTime.of(2015, Month.OCTOBER, 31, 10, 0);
    
    ZonedDateTime date = ZonedDateTime.of(ld, ZoneId.of("US/Eastern"));
    System.out.println(date);       //line 1 - 2015-10-31T10:00-04:00[US/Eastern]
    
    date = date.plus(Duration.ofDays(1));
    System.out.println(date);       //line 2 - 2015-11-01T09:00-05:00[US/Eastern]
    
    date = ZonedDateTime.of(ld, ZoneId.of("US/Eastern"));
    System.out.println(date);       //line 3 - 2015-10-31T10:00-04:00[US/Eastern]
    
    date = date.plus(Period.ofDays(1));
    System.out.println(date);       //line 4 - 2015-11-01T10:00-05:00[US/Eastern]
    
    Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

java datetime dst java-8 zoneddatetime

2
推荐指数
1
解决办法
573
查看次数

映射器装饰器未编译

我的映射器的映射器装饰器未编译。映射器正在编译,但装饰器未编译。因为,在构建过程中,即使我在映射器装饰器中执行此操作,我也会遇到类型转换错误。还有什么要补充的吗?

映射器代码:

 @Mapper
    @DecoratedWith(OneMapperDecorator.class)

    public interface OneMapper {
     public TwoObject convertToTwoObject(OneObject one);
    }
Run Code Online (Sandbox Code Playgroud)

装饰器代码:

     public abstract class OneMapperDecorator implements OneMapper {

            private final OneMapper delegate;

            public OneMapperDecorator (OneMapper delegate) {
                this.delegate = delegate;
            }
            @Override
            public TwoObject convertToTwoObject(OneObject one)
            {
                TwoObject two=delegate.convertToTwoObject(one);

                two.setTotalFare(new BigDecimal(one.getPrice()));//string to bigdecimal conversion
                return two;
            }
}
Run Code Online (Sandbox Code Playgroud)

spring-mvc java-8 mapstruct

2
推荐指数
1
解决办法
1587
查看次数

Instant.now 相当于 java.util.Date 或 Java 7

我有一个使用 Java 7 的系统,我需要生成一个与Instant.now(Java 8) 等效的日期。

例如,Instant.now().toString()生成如下日期: “2018-12-19T12:32:46.816Z”

使用java.util.Date我有这个日期:“2018-12-19T10:38:13.892”

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat sdf;
    sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
    String text = sdf.format(date);
    System.out.println(text);
Run Code Online (Sandbox Code Playgroud)

我不知道是否可以简单地在该日期末尾连接一个“Z” 。

如果没有“Z”,另一个解析此日期的系统Instant.parse会抛出错误:

java.time.format.DateTimeParseException:无法在 java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1988) 的索引 23 处解析文本“2018-12-19T10:38:13.892” .base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890) 在 java.base/java.time.Instant.parse(Instant.java:395)

java datetime datetime-format java-7 java-8

2
推荐指数
1
解决办法
6860
查看次数