标签: java-8

Websphere Liberty 中的 java8 时间反序列化

我的 Websphere Liberty 安装/IBM Bluemix 实例遇到问题。我正在使用新的 java.time 类(例如 LocalDateTime),但使用 Jackson 2.8 映射器的反序列化版本会导致难以处理的结果(完整对象反序列化而不是时间戳)。 https://geowarin.github.io/jsr310-dates-with-jackson.html 但是我怎样才能在 Liberty 中做同样的事情呢?例如:接收 2016-02-02T23:24:08.255+01:00 作为反序列化 JSON 响应的结果

谢谢

java-8 websphere-liberty ibm-cloud

3
推荐指数
1
解决办法
672
查看次数

Android studio在项目中找不到java.math.BigInteger一些方法

我使用 kotlin 在 Intellij Idea 中实现了一个项目。这是没有错误的工作。这是我的 Intellij 项目照片,没有错误

在此输入图像描述 但是当我在 Android Studio 中实现这个项目时,我得到了错误,因为工作室在 BigInteger 类中找不到这个方法

longValueExact()

Android Studio 项目照片:

在此输入图像描述 我的计算机中有一个 JDK (v 1.8) 。但在 Itellij 项目中此方法有效,而在 android studio 中无效。

我在android studio中打开java.math.BigInteger类并看到longValueExact()方法:

在此输入图像描述 科特林类:

open class AuthKey(val key: ByteArray) {

constructor(key: ByteBuffer) : this(key.array())

init {
    if (key.size != 256)
        throw RuntimeException("AuthKey must be 256 Bytes found ${key.size} bytes")
}

// see https://core.telegram.org/mtproto/description#key-identifier
// SHA1 generates 20 bytes long hash, authKeyId is the lower 8 bytes
val keyId = CryptoUtils.substring(CryptoUtils.SHA1(key), 12, 8)

fun …
Run Code Online (Sandbox Code Playgroud)

java-8

3
推荐指数
1
解决办法
1809
查看次数

为什么排序(Comparator::reverseOrder)不起作用?

下面的 Stream 表达式工作得很好:

Stream<String> s = Stream.of("yellow","blue", "white");
 s.sorted(Comparator.reverseOrder())
  .forEach(System.out::print);` //yellowwhiteblue
Run Code Online (Sandbox Code Playgroud)

为什么带有方法引用的等效方法无法编译?

s.sorted(Comparator::reverseOrder).forEach(System.out::print);
Run Code Online (Sandbox Code Playgroud)

Comparator 类型没有定义适用于此处的reverseOrder(String, String)

java comparator java-8 java-stream

3
推荐指数
1
解决办法
1170
查看次数

Java 8 的 ZonedDateTime 转换时是否考虑夏令时?

我有以下代码:

ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(
            this.start.toLocalDateTime(), ZoneOffset.UTC,
            ZoneOffset.systemDefault());
Run Code Online (Sandbox Code Playgroud)

this.start 来自 java.sql.Timestamp。我在这里明确地从 UTC 转换为系统的本地偏移量,这是否足够聪明以考虑夏令时?

java-8 zoneddatetime

3
推荐指数
1
解决办法
5742
查看次数

未找到类 AWS lambda 异常

我创建了一个 aws Lambda 函数,它将 hello world 打印到控制台

使用类所在的包名称和要调用的方法名称配置 lambda,并将 jar 文件上传到 aws lambda 函数。

当我执行 lambda 时,出现异常,提示找不到类。

消息为

{
  "errorMessage": "Class not found: com.coreservice.lambda.Handler",
  "errorType": "class java.lang.ClassNotFoundException"
}
Run Code Online (Sandbox Code Playgroud)

无法理解为什么 aws 无法在 jar 中找到类。

以下详细信息是项目配置

public class Handler implements RequestHandler<SNSEvent, Object> {
    
       @Override
        public Object handleRequest(final SNSEvent input, final Context context) {
                if (Objects.nonNull(input) && !CollectionUtils.isNullOrEmpty(input.getRecords())) {
                    context.getLogger().log("Hello World");
                    context.getLogger().log("queue = "+ SQS_URL);
                }
                return StringUtils.EMPTY;
            }
}
Run Code Online (Sandbox Code Playgroud)

项目pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.coreservice</groupId>
    <artifactId>SNS-SQS-Filter-Lambda</artifactId>
    <packaging>jar</packaging>
    <version>136.0.0-SNAPSHOT</version>
    <name>SNS-SQS-Filter-Lambda</name>
    <dependencies> …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services maven-plugin maven java-8 aws-lambda

3
推荐指数
1
解决办法
8180
查看次数

File.lines() 并行流的内存使用情况

我正在使用 Files.lines() 从大文件(8GB+)读取行。如果按顺序处理,它会很好地工作,并且内存占用非常低。一旦我将parallel()添加到流中,它似乎就会永远挂在它正在处理的数据上,最终导致内存不足异常。我相信这是 Spliterator 在尝试拆分时缓存数据的结果,但我不确定。我剩下的唯一想法是编写一个带有 trySplit 方法的自定义 Spliterator,该方法剥离少量数据进行拆分,而不是尝试将文件拆分为一半或更多。有人遇到过这种情况么?

java-8 java-stream

3
推荐指数
1
解决办法
2451
查看次数

使用java流从现有地图创建新地图

我有一张具有以下结构的地图:

Map<String, Map<String, String>> input;
Run Code Online (Sandbox Code Playgroud)

它基本上包含一组 ID,并且对于每个 ID,包含一个与属性关联的值。

For ex:
ID:       Attribute    Value
A           X           100
A           Y           200
B           X           40
B           Y           40
Run Code Online (Sandbox Code Playgroud)

我只对每个 ID 的属性 X 感兴趣,我想做一些处理并将其存储为一个具有相同定义的新地图 Map>

我正在 Java 8 中尝试:

Map<String, Map<String, String>> getResults(Map<String, Map<String, String>> input) {
    input.entrySet().stream()
        .map(id -> {
            String valueX = id.getValue().get("X");
            String computeX = compute(valueX);
            // Now start adding these results to the new map.
        } )
}
Run Code Online (Sandbox Code Playgroud)

我无法理解如何将其添加到新地图中。

java hashmap java-8

3
推荐指数
1
解决办法
7427
查看次数

日期字符串到 OffsetDateTime

我正在将日期/日期时间字符串转换为OffsetDateTime并且我有日期时间格式,它可能具有这些值之一

yyyy-MM-dd, yyyy/MM/dd
Run Code Online (Sandbox Code Playgroud)

有时有或没有时间,我需要将其转换为OffsetDateTime.

我试过下面的代码

// for format yyyy-MM-dd
DateTimeFormatter DATE_FORMAT = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd")
                        .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
                        .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
                        .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
                        .parseDefaulting(ChronoField.MILLI_OF_SECOND, 0)
                        .toFormatter();
Run Code Online (Sandbox Code Playgroud)

由于没有时间,我将其设置为默认值,但是当我尝试解析时

OffsetDateTime.parse("2016-06-06", DATE_FORMAT)
Run Code Online (Sandbox Code Playgroud)

它抛出错误就像

线程“main”中的异常 java.time.format.DateTimeParseException:无法解析文本“2016-06-06”:无法从 TemporalAccessor 获取 OffsetDateTime:{},ISO 解析为 java 类型的 2016-06-06T00:00 .time.format.Parsed 已解析

谁能帮我解决这个问题吗?

datetimeoffset datetime-parsing java-8 java-time

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

java.time.Clock.systemDefaultZone().getZone() 与 java.util.TimeZone.getDefault().toZoneId() 之间有什么区别?

鉴于两者java.time.Clock.systemDefaultZone().getZone()都java.util.TimeZone.getDefault().toZoneId()返回相同的输出,两者之间有什么区别吗?

例如这段代码

import java.time.Clock;
import java.util.TimeZone;

public class Main {

  public static void main(String[] args) {
    System.out.println("Clock.systemDefaultZone().getZone() : " 
        + Clock.systemDefaultZone().getZone());
    System.out.println("TimeZone.getDefault().toZoneId() : " 
        + TimeZone.getDefault().toZoneId());
  }

}
Run Code Online (Sandbox Code Playgroud)

返回此输出

Clock.systemDefaultZone().getZone() : Europe/Paris
TimeZone.getDefault().toZoneId() : Europe/Paris
Run Code Online (Sandbox Code Playgroud)

java timezone java-8 java-time

3
推荐指数
1
解决办法
2212
查看次数

Java 8 - 按列表分组、排序并显示其总数

我只是在使用streams时使用groupingBy。我无法根据水果的名称对水果进行排序,我还想根据水果的名称进行排序 for (// 1.1== >按列表分组并显示其总数)Java8

public class StreamCollectorsGroupingByDemo {
    public static void main(String[] args) {
        List<String> items = Arrays.asList("apple", "apple", "banana", "apple", "orange", "banana", "papaya");

        // 1.1== >Group by a List and display the total count of it
        Map<String, Long> result = items.stream()
                .sorted()
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        System.out.println("RESULT : "+result);

        // 1.2 Add sorting
        Map<String, Long> finalMap = new LinkedHashMap<>();
        result.entrySet().stream()
            .sorted(Map.Entry.<String, Long> comparingByValue()
            .reversed())
            .forEachOrdered(e -> finalMap.put(e.getKey(), e.getValue()));
        System.out.println("FINAL RESULT : "+finalMap);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出是:

RESULT …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

3
推荐指数
1
解决办法
8082
查看次数