Tag: java 8

如何使用Java 8 DateTimeFormatter更改解析两个字母年份的基准日期?

如果我使用像d/M/yy这样的模式来创建Java 8 DateTimeFormatter(例如使用DateTimeFormatter.ofPattern(pattern); (我将只用于解析,而不是格式化),它会将所有两个字母的年份解释为20xx例如解析像13/5/99这样的字符串被解释为2099-05-13 ,在我的情况下是错误的(它本来是在1999年)。 在我的应用程序中,我正在尝试从OCR文档中解析日期,这可能仍然是从90年代开始的,所以使用旧的SimpleDateFormat行为将日期解释为在当前日期之前和之后的20年之内我很好。 但由于各种原因,我仍然希望将整个日期解析逻辑切换到新的Java 8 DateTimeFormatters。 浏览Java源代码,我发现这都是相对于常量ReducedPrinterParser.BASE_DATE解释的,但我认为无法更改从模式构建自己的格式化程序时使用的值。 这是不可能的,还是我错过了指定解析两个字母年份的行为的可能性?

如何根据区域设置格式化YearMonth和MonthDay?

使用特定的Locale在Java 8中格式化LocalDate可以这样实现: DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT).withLocale(myLocale).format(value); DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM).withLocale(myLocale).format(value); DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG).withLocale(myLocale).format(value); DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL).withLocale(myLocale).format(value); 假设value = LocalDate.now()这将导致: // myLocale = Locale.ENGLISH 6/30/16 Jun 30, 2016 June 30, 2016 Thursday, June 30, 2016 // myLocale = Locale.GERMAN 30.06.16 30.06.2016 30. Juni 2016 Donnerstag, 30. Juni 2016 // myLocale = new Locale(“es”, “ES”) 30/06/16 30-jun-2016 30 de junio de 2016 jueves 30 de junio de […]

Java lang IllegalAccess通过HashBasedTable累加器收集Guava不可变表

执行下面的代码时出错, 引起:java.lang.IllegalAccessError:试图从类访问com.google.common.collect.AbstractTable类 ImmutableTable.copyOf(listItemsToProcess.parallelStream() .map(item -> ProcessorInstanceProvider.getInstance() .buildImmutableTable(item)) .collect(() -> HashBasedTable.create(), HashBasedTable::putAll, HashBasedTable::putAll) ); 出现错误 – HashBasedTable :: putAll使用Oracle的1.8 jre

Java8 Lambda:concat列表

我试图连接流的列表并处理它。 class A { public List bList; } List aList; aList.stream().map(a -> a.bList)…. 在这里我得到几个b的列表。 但是,我想在一个列表中收集我的所有b。 有任何想法吗 ?

不兼容的类型:推理变量T具有不兼容的边界

我有以下代码 public int solution(int X, int[] A) { List list = Arrays.asList(A); 由于某种原因,它抛出了以下编译错误 Solution.java:11:错误:不兼容的类型:推理变量T具有不兼容的边界List list = Arrays.asList(A); ^等式约束:整数下限:int []其中T是一个类型变量:T扩展方法asList(T …)中声明的Object 我认为这是一个Java 8function,但我不知道如何解决错误

function界面什么都不带,什么都不返回

JDK中是否有标准的function接口,什么都不带,什么都不返回? 我找不到一个。 类似于以下内容: @FunctionalInterface interface Action { void execute(); }

使用Streams API对Collection中的n个随机不同元素执行操作

我正在尝试使用Java 8中的Streams API从集合中检索n个唯一的随机元素以进行进一步处理,但是没有太多或任何运气。 更准确地说,我想要这样的东西: Set subList = new HashSet(); Queue collection = new PriorityQueue(); collection.addAll(Arrays.asList(1,2,3,4,5,6,7,8,9)); Random random = new Random(); int n = 4; while (subList.size() v.doSomethingFancy()); 我想尽可能高效地做到这一点。 可以这样做吗? 编辑:我的第二次尝试 – 虽然不是我的目标: List sublist = new ArrayList(collection); Collections.shuffle(sublist); sublist.stream().limit(n).forEach(v -> v.doSomethingFancy()); 编辑:第三次尝试(灵感来自Holger ),如果coll.size()很大且n很小,这将消除很多shuffle的开销: int n = // unique element count List sublist = new ArrayList(collection); […]

在Java 8中将Map连接到String的最优雅方式

我喜欢番石榴 ,我会继续使用番石榴。 但是,在有意义的地方,我尝试使用Java 8中的“新东西”。 “问题” 假设我想在String加入url属性。 在Guava我会这样做: Map attributes = new HashMap(); attributes.put(“a”, “1”); attributes.put(“b”, “2”); attributes.put(“c”, “3”); // Guava way String result = Joiner.on(“&”).withKeyValueSeparator(“=”).join(attributes); result是a=1&b=2&c=3 。 题 在Java 8 (没有任何第三方库)中,最优雅的方法是什么?

无法解析ISO 8601格式的字符串,缺少冒号的冒号,到Java 8 Date

我对java 8日期格式/解析function有点沮丧。 我试图找到Jackson配置和DateTimeFormatter来解析”2018-02-13T10:20:12.120+0000″字符串到任何Java 8日期,并没有找到它。 这是java.util.Date示例,它工作正常: Date date = new SimpleDateFormat(“yyyy-MM-dd’T’hh:mm:ss.SSSZZZ”) .parse(“2018-02-13T10:20:12.120+0000”); 相同的格式不适用于新的日期时间api ZonedDateTime dateTime = ZonedDateTime.parse(“2018-02-13T10:20:12.120+0000”, DateTimeFormatter.ofPattern(“yyyy-MM-dd’T’hh:mm:ss.SSSZZZ”)); 我们应该能够以适合FE UI应用程序的任何格式格式化/解析日期。 也许我误解或误解了一些东西,但我认为java.util.Date提供了更多的格式灵活性并且更易于使用。

为什么这个流没有返回元素?

我尝试将以下代码编写为流: AbstractDevice myDevice = null; for (AbstractDevice device : session.getWorkplace().getDevices()) { if (device.getPluginconfig().getPluginType().getId() == 1) { myDevice = device; } } 这段代码工作正常。 但是当我像这样重写它时它不再起作用了: myDevice = session.getWorkplace().getDevices().stream() .filter(s -> s.getPluginconfig().getPluginType().getId() == 1) .findFirst().get(); 我从流中返回的Optional没有值。 为什么? 编辑 当我尝试这个时(我仍然从getDevices()获得两个设备): List testList = session.getWorkplace().getDevices() .stream().collect(Collectors.toList()); testList为空。 所以我的设备List流似乎出了问题? 它是一个JavaEE应用程序,我从相应的实体获取我的设备: @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH}) @JoinTable(name = “Workplace_AbstractDevice”, joinColumns = { […]