标签: java-8

Time for getting by comparable key from HashMap

AFAIK since java 8 bucket structure was changed from linked list to tree.

So in case hashCode() method return constant and our key class implements Comparable interface then complexity to get element from single cell will be reduced from O(n) to O(log n).

I tried to check it:

 public static void main(String[] args) {
    int max = 30000;
    int times = 100;
    HashMap<MyClass, Integer> map = new HashMap<>();
    HashMap<MyComparableClass, Integer> compMap = new HashMap<>();

    for(int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

java hashtable hashmap java-8

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

如何在stream.collect(Collectors)中指定具体的集合类型

我们如何从 Stream.collect() 方法创建一些具体的集合类型

例如,对于下面的示例,我想创建 LinkedList 而不是通用列表。

List<Integer> list = Arrays.asList(10,20,30,40);
        List<Integer> collect3 = list.stream().filter(i ->i%2==0).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

我该如何指定,我需要创建LinkedList

java-8 java-stream

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

Jetty 9.4 给出 ArrayIndexOutOfBoundsException

我正在尝试在 jetty 9.4 上部署我的 war 文件(分别使用 asm 5.1 和 6 尝试了 9.4.0 和 9.4.8)。我遇到以下错误。我使用java 1.8进行开发

\n\n
java.lang.RuntimeException: Error scanning entry org/aspectj/org/eclipse/jdt/internal/compiler/parser/UpdateParserFiles.class from jar file:///tmp/jetty-0.0.0.0-8080-xxxxx-service-8.0.0.0000-SNAPSHOT.war-_xxxx-8.0.0.0000-SNAPSHOT-any-4304648590162252598.dir/webapp/WEB-INF/lib/aspectjtools-1.8.13.jar\nat org.eclipse.jetty.annotations.AnnotationParser.lambda$parseJar$0(AnnotationParser.java:883)\nat java.util.TreeMap$ValueSpliterator.forEachRemaining(TreeMap.java:2893)\nat java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)\nat org.eclipse.jetty.annotations.AnnotationParser.parseJar(AnnotationParser.java:875)\nat org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:839)\nat org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:161)\nat org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:468)\nat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)\nat org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)\nat java.lang.Thread.run(Thread.java:745)\nCaused by: \njava.lang.ArrayIndexOutOfBoundsException: 3379\nat org.objectweb.asm.ClassReader.<init>(ClassReader.java:171)\nat org.objectweb.asm.ClassReader.<init>(ClassReader.java:143)\nat org.objectweb.asm.ClassReader.<init>(ClassReader.java:418)\nat org.eclipse.jetty.annotations.AnnotationParser.scanClass(AnnotationParser.java:933)\nat org.eclipse.jetty.annotations.AnnotationParser.parseJarEntry(AnnotationParser.java:918)\nat org.eclipse.jetty.annotations.AnnotationParser.lambda$parseJar$0(AnnotationParser.java:879)\nat java.util.TreeMap$ValueSpliterator.forEachRemaining(TreeMap.java:2893)\nat java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)\nat org.eclipse.jetty.annotations.AnnotationParser.parseJar(AnnotationParser.java:875)\nat org.eclipse.jetty.annotations.AnnotationParser.parse(AnnotationParser.java:839)\nat org.eclipse.jetty.annotations.AnnotationConfiguration$ParserTask.call(AnnotationConfiguration.java:161)\nat org.eclipse.jetty.annotations.AnnotationConfiguration$1.run(AnnotationConfiguration.java:468)\nat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)\nat org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)\nat java.lang.Thread.run(Thread.java:745)\xe2\x80\x8b\n
Run Code Online (Sandbox Code Playgroud)\n

annotations jetty java-8

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

如何在 Java 中获取 Temporal 的年份

我的问题是从 Temporal 接口中找到一个有用的方法。具体来说,我想从一个实现 Temporal 接口的对象中获取年份。接口的所有方法都只是从对象中添加或删除,但是,我只想获取时间本身的年份。

java java-8 java-time

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

Spring Boot JSON 空值序列化

如何在 Spring Boot 的默认 JSON 响应中强制将 null 对象序列化为空字符串?

我希望它显示为:

{
    myProperty: "",
}
Run Code Online (Sandbox Code Playgroud)

但默认输出的是:

{
    myProperty: null,
}
Run Code Online (Sandbox Code Playgroud)

我不希望 myProperty 被排除在该列表之外,所以我对更改JsonInclude.Include.NON_NULL

这是我尝试过的:

在我的主课中WebMvcConfigurerAdapter:

@Autowired
private NullAsEmptyStringSerializer nullSerializer;

@Bean
public Jackson2ObjectMapperBuilderCustomizer addCustomSerialization() {
    return jacksonObjectMapperBuilder -> {
        DefaultSerializerProvider serializerProvider = new DefaultSerializerProvider.Impl();
        serializerProvider.setNullValueSerializer(nullSerializer);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setSerializerProvider(serializerProvider);
        jacksonObjectMapperBuilder.configure(objectMapper);
    };
Run Code Online (Sandbox Code Playgroud)

然后是我的nullSerializer对象类:

@Component
public class NullAsEmptyStringSerializer extends JsonSerializer<Object> {

    @Override
    public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString("\"\"");
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是该serialize() …

java jackson java-8 spring-boot

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

在java 8中映射自定义List对象的超过1个属性

我有下面的自定义列表对象List<Person> personList

class Person(){
    String name;
    String age;
    String countryName;
    String stateName;
// getter and setter for all property
}
Run Code Online (Sandbox Code Playgroud)

如果我想personList根据countryName或StateName进行映射,那么我会这样做:

List<String> countryName = personList.stream().map(Person :: getCountryName)
Run Code Online (Sandbox Code Playgroud)

或者

List<String> stateName = personList.stream().map(Person :: getStateName)
Run Code Online (Sandbox Code Playgroud)

但现在我想在新的自定义列表对象中根据 CountryName 和 StateName 映射 personListList<Country> countryandStateList

class Country(){
    String countryName;
    String stateName;
// getter and setter for CountryName and StateName
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

java java-8

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

AWS Lambda - Java静态初始化

在AWS lambda函数(用Java编写)中我想使用AsyncHttpClient(https://github.com/AsyncHttpClient/async-http-client). Unfortunately it takes around 500 ms to create an instance of this object.. (but I still like it, please don't advice me to change the http client).

我正在考虑在静态初始化块中创建 AsyncHttpClient 。因此,它可能会由 AWS 执行一次,并且每次 AWS Lambda 执行都会克隆快照。我对么 ?

何时在 AWS Lambda 中执行静态块?

  • 一旦快照被克隆到每个 AWS Lambda 调用
  • 或者为每个 Lambda 执行单独执行静态块(并且将 Http Client 的创建放在那里没有帮助)

谢谢你的帮助

java initialization java-8 aws-lambda

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

如何在 Java8 Streams 中比较两个 Map 列表以识别具有多个过滤谓词的匹配和不匹配记录

要求是使用流使用多个匹配标准从映射列表中获取所有匹配和不匹配的记录。即,不需要使用单个过滤器来仅比较“电子邮件”,而是需要使用多个过滤器谓词来比较两个列表以匹配记录,以比较电子邮件和 Id 两者。

清单1:

[{"Email","naveen@domain.com", "Id": "A1"}, 
 {"Email":"test@domain.com","id":"A2"}]
Run Code Online (Sandbox Code Playgroud)

清单2:

[{"Email","naveen@domain.com", "Id": "A1"}, 
 {"Email":"test@domain.com","id":"A2"}, 
 {"Email":"test1@domain.com","id":"B1"}]
Run Code Online (Sandbox Code Playgroud)

使用流,我可以使用电子邮件上的单个过滤器谓词找到匹配和不匹配的记录:匹配记录:

[{"Email","naveen@domain.com", "Id": "A1"}, 
 {"Email":"test@domain.com","id":"A2"}]
Run Code Online (Sandbox Code Playgroud)

不匹配的记录:

[{"Email":"test1@domain.com","id":"B1"}]]
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以同时比较电子邮件和 ID,而不仅仅是电子邮件

dbRecords.parallelStream().filter(searchData ->
                inputRecords.parallelStream().anyMatch(inputMap ->
                    searchData.get("Email").equals(inputMap.get("Email")))).
                collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class ListFiltersToGetMatchingRecords {


    public static void main(String[] args) {

        long startTime = System.currentTimeMillis();
        List<Map<String, Object>> dbRecords = createDbRecords();
        List<Map<String, Object>> inputRecords = createInputRecords();

        List<Map<String,Object>> matchinRecords = dbRecords.parallelStream().filter(searchData ->
                inputRecords.parallelStream().anyMatch(inputMap ->
                    searchData.get("Email").equals(inputMap.get("Email")))).
                collect(Collectors.toList());

        List<Map<String,Object>> notMatchinRecords = inputRecords.parallelStream().filter(searchData ->
                dbRecords.parallelStream().noneMatch( inputMap -> …
Run Code Online (Sandbox Code Playgroud)

java java-8

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

ConcurrentHashMap 中的合并函数

有关于 ConcurrentHashMaps 的合并功能的问题。函数式编程新手,所以不确定我是否正确使用它。

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html#merge-KV-java.util.function.BiFunction-

map.merge(consumer, val, (a, b) -> (a.date().compareTo(b.date())) >= 0 ? a : b);
Run Code Online (Sandbox Code Playgroud)

如果我正确地推理出它应该做的事情就是insert (consumer, val)在没有现有条目的情况下将其放入表中。如果有,那么它应该比较 a 和 b 的日期(表中的值和我的 val)。如果“val”大于表中的条目,则应将其替换为该条目。否则,坚持使用现有条目。

感谢任何帮助。谢谢!

java hashmap concurrenthashmap java-8 bifunctor

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

错误:无法找到或加载主类 com.sun.tools.internal.xjc.XJCFacade

我正在使用 jdk 8 运行 eclipse luna ,我尝试生成 jaxb 类,并且不断显示此错误,我尝试了在互联网上找到的多种解决方案,但没有任何解决方案真正适合我 ps:我指向 jdk 8 而不是 jre。请帮忙!

xml jaxb java-8 eclipse-luna

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