标签: java-8

HashMap什么时候会使用TreeSet作为桶呢?

HashMap文档中我们可以读到:

请注意,使用具有相同 hashCode() 的多个键肯定会降低任何哈希表的性能。为了减轻影响,当键是 Comparable 时,此类可以使用键之间的比较顺序来帮助打破平局。

我知道如果密钥实现Comparable接口,在许多哈希冲突时,桶可以从 转变ListTreeSet

是否可以设置容量,或检查何时转换?

java java-8

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

使用 Java8 Stream 获取字符串值(如果存在)或 null(如果不存在)

我有一个类似如下所示的 json。需求是根据id获取key值。IE。假设如果 Id 是 A1键值应返回2gAwIBAgIQKGZsKfAUzaJHVantyrwVdzANBgkqhkiG9w0BAQs。键数组始终只包含一个元素。

{
  "keys": [
    {
      "id": "A1",
      "key": [
        "2gAwIBAgIQKGZsKfAUzaJHVantyrwVdzANBgkqhkiG9w0BAQs"
      ]
    },
     {
      "id": "A2",
      "key": [
        "swKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb250cm9sfsf2dew"
      ]
    },
     {
      "id": "A3",
      "key": [
        "EyJhY2NvdW50cy5hY2Nlc3Njb250cm9sLndpbmRvd3Mubdwe2"
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

为了实现上述内容,我使用 Java8 Stream 编写了以下代码,但问题是它返回了Optional<KeyDetails>我需要再次解析并获取键值的内容

String keyDetails = "{\"keys\":[{\"id\":\"A1\",\"key\":[\"2gAwIBAgIQKGZsKfAUzaJHVantyrwVdzANBgkqhkiG9w0BAQs\"]},{\"id\":\"A2\",\"key\":[\"swKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb250cm9sfsf2dew\"]},{\"id\":\"A3\",\"key\":[\"EyJhY2NvdW50cy5hY2Nlc3Njb250cm9sLndpbmRvd3Mubdwe2\"]}]}";
AccessKeys accessKeys = new ObjectMapper().readValue(keyDetails, AccessKeys.class);
Optional<KeyDetails> filteredKey = accessKeys.getKeys().stream().filter(key-> key.getId().equals("A3")).findAny();
if(filteredKey.isPresent()) {
    String keyValue = filteredKey.get().getKey().get(0);
    System.out.println("keyValue==>"+keyValue);
}
Run Code Online (Sandbox Code Playgroud)

我想要的是得到Optional<String>而不是Optional<KeyDetails>。即,如果 id 存在,它应该只返回键数组中存在的键值。

json 满足的一些条件是:

  • 有时可能会出现重复密钥 ID 的情况,在这种情况下它应该只选择一个(第一个)
  • 键数组将始终包含一个字符串值

谁能帮我解决这个问题

java collections filtering java-8 java-stream

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

Java流中的中间操作

在java 8中,我使用Streams打印输出,但大小为0。为什么?

public class IntermediateryAndFinal {
    public static void main(String[] args) {
        Stream<String> stream = Stream.of("one", "two", "three", "four", "five");

        Predicate<String> p1 = Predicate.isEqual("two");
        Predicate<String> p2 = Predicate.isEqual("three");

        List<String> list = new ArrayList<>();

        stream.peek(System.out::println)
            .filter(p1.or(p2))
            .peek(list::add);
        System.out.println("Size = "+list.size());
    }
}
Run Code Online (Sandbox Code Playgroud)

java collections java-8 java-stream

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

在设置变量之前检查 null - 没有 if-else

我用来从一个对象Lombok-Builder构建我的apijava对象entity

RewardApi.builder()
                .rewardId(rewardEntity.getrewardId())
                .rewardTitle(rewardEntity.getrewardTitle())
                .rewardText(rewardEntity.getrewardText())
                .rewardFor(rewardEntity.getrewardFor())
                .rewardType(rewardEntity.getrewardType())
                .rewardFromDate(rewardEntity.getrewardFromDate().toZonedDateTime())
                .rewardToDate(rewardEntity.getrewardToDate().toZonedDateTime())
                .isDisplayOn(rewardEntity.getIsDisplayOn())
                .createdId(rewardEntity.getCreatedId())
                .updatedId(rewardEntity.getUpdatedId())
                .createdDate(rewardEntity.getCreatedDate().toZonedDateTime())
                .lastModifiedDate(rewardEntity.getLastModifiedDate().toZonedDateTime())
                .build();
Run Code Online (Sandbox Code Playgroud)

nullPointerException在设置lastModifiedDate字段时得到了结果,因为entity对象正在获取该字段并且null正在toZonedDateTime()执行null

如何在不使用传统方式(如下所述)的情况下解决这个问题

if (null!=rewardEntity.getLastModifiedDate(){....}

我想null在使用设置变量时进行检查builder-pattern,而不是null在构建对象后进行检查。无论如何 ?

java lombok java-8

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

VS Code 不支持 JDK 1.8?

在此输入图像描述

VS Code(代码运行器扩展)是否支持 JDK 1.8?早上我使用的是 JDK 12 ,但后来我降级到 JDK 1.8 来尝试小程序查看器和其他东西。不幸的是现在它甚至没有突出显示代码。

有人请告诉我问题及其解决方案。

java java-8 visual-studio-code vscode-code-runner

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

CompletableFuture,main 永远不会退出

我正在学习 Java 8 以及更详细的“CompletableFuture”。遵循这个有趣的教程: https://www.callicoder.com/java-8-completablefuture-tutorial/

我编写了以下 Java 类:

package parallels;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;

import javax.ws.rs.client.ClientRequestFilter;
import javax.ws.rs.core.Response;

import org.jboss.resteasy.client.jaxrs.ResteasyClient;
import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder;
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;




public class Test {
    private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0";
    private static final Executor executor = Executors.newFixedThreadPool(100);

    public static void main(String[] args) {

        List<String> webPageLinks= new ArrayList<String>();
        for (int i=0;i<30;i++) {
            webPageLinks.add("http://jsonplaceholder.typicode.com/todos/1");
        }

        // Download contents of all the …
Run Code Online (Sandbox Code Playgroud)

java java-8 completable-future

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

如何在java 8中groupingBy之后仅从对象中提取ID

public class Element {

    private Long id;

    private String groupType;

}
Run Code Online (Sandbox Code Playgroud)

我有元素列表。具有不同组类型的列表,例如“group1”、“group2”{1,group1}、{2,group1}、{3,group2}{4,group2}

我想为每个组创建两个不同列表的地图,但使用 ids(Map>) 而不是使用 Element 对象 Map>

下面的代码对于 Map> ie 工作正常

Map<String, List<Element>> elementByGroup = new HashMap<>();
        elementByGroup = element.stream().collect(
                Collectors.groupingBy(Element::getGroupType));
Run Code Online (Sandbox Code Playgroud)

如何以 Map<String, List<Long>> 的形式收集结果。我知道通过迭代 Map,然后迭代列表,我们可以在没有 java 8 的情况下获得 id 列表。但是我想通过在 groupingby 函数之后使用上面的代码进行操作来执行相同的操作。

java collections java-8 java-stream

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

Supply::get 可以返回 null

的文档Supplier::get并未明确说明其返回的可能性或不返回null。是否可以 ?

我想这可能是a的情况Supplier<Void>。在这种情况下,我如何调用 mySupplier以确保它不会导致Supplier<Void>?换句话说,哪一个T是这样的以至于它可以不是Void

java java-8

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

Java 8 - 将 &lt;Map&gt; 列表到单个映射中

我有一个List<Map<String, String>>。我想将其转换为单个地图。

列表大小可以是 1..n。不确定如何使用 Java 8 Stream 来做到这一点?

List<Map<String, String>> mapList = new ArrayList<>();

Map<String, String> map1 = new HashMap<>();
map1.put("1", "One");
map1.put("2", "Two");

Map<String, String> map2 = new HashMap<>();
map2.put("3", "Three");
map2.put("4", "Four");

mapList.add(map1);
mapList.add(map2);

Map<String, String> finalMap = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

我们可以在 Java 7 中做这样的事情:

for(Map<String, String> map : mapList) {            
    for(String key : map.keySet()) {                
        finalMap.put(key, map.get(key));
    }           
}

System.out.println("Final Map " + finalMap); // Final Map {1=One, 2=Two, 3=Three, 4=Four}
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream

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

Spring:将字符串列表的所有值注入到bean中

我想使用具有 xml 配置的属性文件注入列表值。

        <property name="headerOfFile">
            <util:list id="headerOfFileList" value-type="java.lang.String">
                <value>headerA</value>
                <value>headerB</value>
            </util:list>
        </property>
Run Code Online (Sandbox Code Playgroud)

我想使用 xml bean 配置通过属性文件注入我的列表值。我知道使用 Java 我们可以这样做:

@Value("#{'${my.list.of.header.strings}'.split(',')}") 
private List<String> headerOfFile;
Run Code Online (Sandbox Code Playgroud)

假设我的属性文件已正确加载,如下所示:

my.list.of.header.strings=headerA,headerB
Run Code Online (Sandbox Code Playgroud)

但我的要求是使用带有属性文件的 xml beans 来完成此操作。

java spring java-8

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