小编Nam*_*man的帖子

地图过滤器列表导致额外的空项目

我有一个简单的类,如下所示:

public class ListOfMapsExample {
    public static void main(String[] args) {
        Map<String, String> map1 = Map.of("aa1k", "aa1v", "aa2k", "aa2v", "aa3k", "aa3v");
        Map<String, String> map2 = Map.of("bb1k", "bb1v", "bb2k", "bb2v", "bb3k", "bb3v");
        Map<String, String> map3 = Map.of("cc1k", "cc1v", "cc2k", "cc2v", "cc3k", "cc3v");

        List<Map<String, String>> maps = Arrays.asList(map1, map2, map3);

        List<Map<String, String>> listOfMaps1 = maps.stream()
                .map(m -> m.entrySet().stream()
                        .filter(map -> map.getKey().equals("aa1k") || map.getKey().equals("bb2k"))
                        .collect(Collectors.toMap(p -> p.getKey(), p -> p.getValue())))
                .collect(Collectors.toList());

        System.out.println("listOfMaps1 :: " + listOfMaps1);
    }
}
Run Code Online (Sandbox Code Playgroud)

预期输出: listOfMaps1 :: [{aa1k=aa1v}, {bb2k=bb2v}] …

java dictionary java-stream

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

Java 记录序列化和对规范构造函数的重复调用

这篇关于可序列化记录的文章中指出

反序列化通过调用记录类的规范构造函数来创建新的记录对象,将从流中反序列化的值作为参数传递给规范构造函数。这是安全的,因为这意味着记录类可以在将值分配给字段之前对其进行验证,就像普通 Java 程序通过 new 创建记录对象一样。“不可能”的对象是不可能的。

这与仅用于验证的构造函数争论。然而,当构造函数操作参数时,这会导致相当奇怪的行为。考虑这个非常人为的简单示例:

以下记录a在保存之前进行操作:

import java.io.Serializable;

public record TRecord (int a) implements Serializable {
    public TRecord {
        a = a-1;
    }
}
Run Code Online (Sandbox Code Playgroud)

下面的程序只是在第一次保存序列化记录并在随后的时间加载它:

import java.io.*;

public class TestRecords {

    public static void main(String args[]) {
        TRecord a1 = null;

        try {
            FileInputStream fileIn = new FileInputStream("tmp");
            ObjectInputStream in = new ObjectInputStream(fileIn);
            a1 = (TRecord) in.readObject();
            in.close();
            fileIn.close();
        } catch (IOException | ClassNotFoundException i) {
            // ignore for now
        }
        if (a1 == …
Run Code Online (Sandbox Code Playgroud)

java serialization java-record java-16

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

从嵌套列表中获取最大值并使用流转换为一个列表

联赛有20人Team,球队有11人Player,球员有int score场地。

 class Player {
        private int score;

        public int getScore() {
            return score;
        }
    }

    class Team {
        private List<Player> players;

        public List<Player> getPlayers() {
            return players;
        }
    }

    class League {
        private List<Team> teams;

        public List<Team> getTeams() {
            return teams;
        }
    }
Run Code Online (Sandbox Code Playgroud)

需要从List<Team> 最好的Player和最高的中进行选择,score使用 StreamList<Player>从每个团队中返回一个包括一名最好的球员。

 public  List<Player> getTopPlayersFromEachTeam(List<Team> league) {
        // implementation
    }
Run Code Online (Sandbox Code Playgroud)

卡在:

league.stream().map(Team::getPlayers).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

任何提示?

java java-stream

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

如何在 List&lt;E&gt; 中找到最小值?

我以这种方式尝试过,但我得到的只是这个错误消息:java:不兼容的类型:E无法转换为int

public static<E extends Comparable<?superE>> Optional<E> min(List<E>list) {
     int result = reduce(list, 0, (a, l) -> a.compareTo((int)l) <= 0 ? a:(int)l);
     return (Optional<E>) Optional.of(result);
}
Run Code Online (Sandbox Code Playgroud)

我真的不知道如何解决这个问题。

java generics lambda list

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

在流管道中放置 parallel() 调用是否重要?

例如,parallel()之前filter()

Stream.of(...)
      .parallel()
      .filter(...)
      .forEach(...);
Run Code Online (Sandbox Code Playgroud)

parallel()filter()

Stream.of(...)
      .filter(...)
      .parallel()
      .forEach(...);
Run Code Online (Sandbox Code Playgroud)

调用顺序parallel()会影响流吗?

java parallel-processing java-stream

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

如何使用 Stream API 在 Java 中将数组转换为 HashMap

我试图做一些非常简单的事情,但编译失败,我不明白是谁

我有一个标题列表,我需要将其转换 Map<Index, String>为键(索引)的含义,值是标题名称

我知道如何为每个人制作它,但我想将它放在Collectors.to地图中,任何帮助将不胜感激

final String[] headerDisplayName = getHeaderDisplayName(harmonizationComponentDataFixRequest);

IntStream.of(0, headerDisplayName.length).collect(Collectors.toMap(Function.identity(), index-> headerDisplayName[index]));
Run Code Online (Sandbox Code Playgroud)

java java-stream

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

为什么调用 -XX:+PrintFlagsFinal 和 -XX:+PrintCommandLineFlags 时 MaxHeapSze 的输出不同?

就像问题一样,当我使用 JVM 选项 -XX+PrintFlagsFinal 运行程序时,我可以看到打印的 MaxHeapSize 如下:

 bool MaxFDLimit                                = true            {product}
uintx MaxGCMinorPauseMillis                     = 4294967295      {product}
uintx MaxGCPauseMillis                          = 4294967295      {product}
uintx MaxHeapFreeRatio                          = 70              {product}
**uintx MaxHeapSize                              := 1044381696      {product}**
 intx MaxInlineLevel                            = 9               {product}
 intx MaxInlineSize                             = 35              {product}
 intx MaxJavaStackTraceDepth                    = 1024            {product}
Run Code Online (Sandbox Code Playgroud)

当我使用 JVM 选项 -XX+PrintCommandLineFlags 运行相同的程序时,我可以看到 MaxHeapSize 为:

-XX:InitialHeapSize=65192896 **-XX:MaxHeapSize=1043086336** -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
Run Code Online (Sandbox Code Playgroud)

你能告诉我为什么这两个不同吗?我认为他们应该是一样的。

jvm jvm-arguments

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

在ubuntu中打开./uiautomatorviewer时出错

E/adb: error: cannot open '/tmp/adb.log': Permission denied
E/ddms: '/home/rishabhambre/Downloads/SDK/platform-tools/adb,start-server' failed -- run manually if necessary
E/adb: ADB server didn't ACK >
E/adb: * failed to start daemon *
E/adb: error: cannot connect to daemon 
Run Code Online (Sandbox Code Playgroud)

ubuntu adb android-uiautomator

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

使用adb命令访问android片段

类似于我Activity在Android中使用以下adb命令启动时看到的内容:

startCommand = "adb shell am start -n " + appPackage + "/." + appActivity;
Run Code Online (Sandbox Code Playgroud)

有没有办法选择性地在活动中开始片段?

command-line adb android-fragments android-activity

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

Java中枚举列表的结尾

我有一个代码块如下:

  1. public enum TierEnum {
        Express,
        Standard; // the semi-colon is redundant
    }
    
    Run Code Online (Sandbox Code Playgroud)

在代码中,分号(;)被编译器标记为冗余.如果我使用的话

  1. public enum TierEnum {
        Express,
        Standard 
    }; // again the semi-colon is redundant
    
    Run Code Online (Sandbox Code Playgroud)

为什么在这两种情况下,分号都标记为多余?如何在Java中定义枚举列表的结尾?

java syntax enums

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