我有一个简单的类,如下所示:
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 程序通过 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) 联赛有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:不兼容的类型: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)
我真的不知道如何解决这个问题。
例如,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()会影响流吗?
我试图做一些非常简单的事情,但编译失败,我不明白是谁
我有一个标题列表,我需要将其转换
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) 就像问题一样,当我使用 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)
你能告诉我为什么这两个不同吗?我认为他们应该是一样的。
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) 类似于我Activity在Android中使用以下adb命令启动时看到的内容:
startCommand = "adb shell am start -n " + appPackage + "/." + appActivity;
Run Code Online (Sandbox Code Playgroud)
有没有办法选择性地在活动中开始片段?
我有一个代码块如下:
public enum TierEnum {
Express,
Standard; // the semi-colon is redundant
}
Run Code Online (Sandbox Code Playgroud)在代码中,分号(;)被编译器标记为冗余.如果我使用的话
public enum TierEnum {
Express,
Standard
}; // again the semi-colon is redundant
Run Code Online (Sandbox Code Playgroud)为什么在这两种情况下,分号都标记为多余?如何在Java中定义枚举列表的结尾?
java ×7
java-stream ×4
adb ×2
command-line ×1
dictionary ×1
enums ×1
generics ×1
java-16 ×1
java-record ×1
jvm ×1
lambda ×1
list ×1
syntax ×1
ubuntu ×1