我想了解下面给出的语句的时间复杂性.(在Java8中)
list.stream().collect(groupingBy(...));
Run Code Online (Sandbox Code Playgroud)
任何的想法?
从Map.java的文档-
在
Map.of()和Map.ofEntries()静态工厂方法提供了一种方便的方法来创建不可改变的地图.
但是当我已经可以使用重载方法时 ......
Map.of("k1","v1","k2","v2","k3","v3"...);
Run Code Online (Sandbox Code Playgroud)
... Map.ofEntries的用途是什么呢?
返回包含从给定条目中提取的键和值的不可变映射,并且条目本身不存储在映射中.
一个人如何避免明确地Exception试图从一个Optional或同时使用中获取价值Optional.get?
目前,API可能会受到以下保护orElseThrow:
// exception could be replaced with any other
Integer opt = anyOddInStream.orElseThrow(
() -> new NoSuchElementException("No value present"));
Run Code Online (Sandbox Code Playgroud)
然而,get当试图访问类似的东西时,直接实现令人失望(当一个人可能不愿意显式抛出异常时)
// the following not only just fails but throws an exception as well
Integer previous = anyOddInStream.get();
Run Code Online (Sandbox Code Playgroud)
如果一个人想要确保其中Optional一个有值,如果没有,他们不想继续null向前传播怎么办?
背景:我正在尝试使用此处的说明为Windows构建Hadoop .我有OpenJDK 11并在运行时遇到以下问题mvn package:
Could not resolve dependencies for project org.apache.hadoop:hadoop-annotations:jar:2.5.0-SNAPSHOT: Could not find artifact jdk.tools:jdk.tools:jar:1.6 at specified path C:\Program Files\Java\jdk-11.0.1\..\lib\tools.jar
我意识到tools.jarOpenJDK 11的Windows版本中不存在.我是否也必须从源代码构建它?如何获得tools.jarOpenJDK 11 的Maven文物?
我有温度等级
class Temperature {
double minTemp;
double maxTemp;
String city;
String country;
}
Run Code Online (Sandbox Code Playgroud)
我有另一个维护温度集合的类
class Temperatures {
List<Temperature> temperatures;
}
Run Code Online (Sandbox Code Playgroud)
我想使用streams对countryName进行分组.
我想要的是
public Map<String, Temperatures> temperaturesByCountry()
Run Code Online (Sandbox Code Playgroud)
但我无法使用流将温度作为地图值,我得到的是温度列表.
我的分组实现如下
Map<String, List<Temperature>> result = this.getTemperatures()
.stream()
.collect(Collectors.groupingBy(Temperature::getCountry));
Run Code Online (Sandbox Code Playgroud)
我想要Map<String, Temperatures>而不是Map<String, List<Temperature>>
我怎样才能做到这一点.
如果我有2个Streams,如下面所示的方法
public Stream<Transaction> getPendingTransaction(Stream<PendingTransaction> pendingTransactionStream,Stream<ProcessedTransaction> processedTransactionStream){ }
Run Code Online (Sandbox Code Playgroud)
我想找到其中存在的所有对象中pendingTransactionStream同样存在于processedTransactionStream基于像一些标准
if
transaction.getId()对于存在的Transaction对象是相同的,pendingTransactionStream并且processedTransactionStreamthen该对象是相同的,我们可以在列表中收集它们.
我尝试这样做,但它给出了错误
processedTransactionStream
.filter( (processedTransaction)->
{
pendingTransactionStream.anyMatch(s->s.getTransactionId().equals(processedTransaction.getTransactionId()) );
}
).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud) 我需要使用Java 11构建应用程序。
但是,下拉菜单在Java 9处停止。
我该怎么办?OpenJDK也可以接受。
我正在使用最新版本的Jenkins。
编辑:到目前为止,我已经使用下载了二进制文件wget,将其提取到计算机上,并JDK_HOME通过Global Configurations 添加了JDK 条目。
为了清理数据列表,我创建了一个接受数据列表和要执行的清理操作列表的方法。
public <T> List<T> cleanData(List<T> data, List<Function<T, T>> cleanOps) {
List<T>dataNew=data.stream().map((str) -> {
T cleanData = str;
for(Function<T,T> function:cleanOps) {
cleanData=function.apply(cleanData);
}
return cleanData;
}).collect(Collectors.toList());
return dataNew;
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是我们在Collectors.toList()返回一个新列表时再次创建整个列表。我们可以在不使用额外空间的情况下获得相同的结果吗?
下面是调用代码:
public void processData() {
List<Function<String, String>> cleanOps = new ArrayList<>();
cleanOps.add(String::toLowerCase);
cleanOps.add(str -> str.replaceAll(" ", ""));
List<String> data = new ArrayList<>();
data.add("John Doe");
data.add("Jane Doe");
System.out.println(Arrays.toString(cleanData(data, cleanOps).toArray()));
}
Run Code Online (Sandbox Code Playgroud) 我一直在使用以下名为 City
@ToString
@AllArgsConstructor
public class City {
Integer id;
String name;
}
Run Code Online (Sandbox Code Playgroud)
并试图将其转换为一个record名为CityRecord作为
record CityRecord(Integer id, String name) {} // much cleaner!
Run Code Online (Sandbox Code Playgroud)
但是转向这样的表示,我们的单元测试之一开始失败。这些测试在内部处理从 JSON 文件中读取的城市列表,并映射到一个对象,进一步计算城市,同时将它们分组到Map. 简化为类似:
List<City> cities = List.of(
new City(1, "one"),
new City(2, "two"),
new City(3, "three"),
new City(2, "two"));
Map<City, Long> cityListMap = cities.stream()
.collect(Collectors.groupingBy(Function.identity(),
Collectors.counting()));
Run Code Online (Sandbox Code Playgroud)
上面的代码断言 true 包含 4 个键,每个键占其出现的 1 个。对于记录表示,结果中的键不超过 3 个Map。是什么导致了这种情况,应该有什么方法来解决这个问题?
我正在尝试使用 Java 14 安装 netbeans。
我收到以下错误 -
> sudo ./Apache-NetBeans-11.3-bin-linux-x64.sh --javahome /home/raj/.sdkman/candidates/java/current
Configuring the installer...
Searching for JVM on the system...
Unsupported JVM version at /home/raj/.sdkman/candidates/java/current.
Try to specify another JVM location using parameter --javahome
Run Code Online (Sandbox Code Playgroud)
以下是我的 Java 详细信息 -
> which java
/home/raj/.sdkman/candidates/java/current/bin/java
> java --version
openjdk 14 2020-03-17
OpenJDK Runtime Environment (build 14+36-1461)
OpenJDK 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
我的操作系统详细信息是 -
> lsb_release -a
LSB Version: core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-x86_64:core-3.2-x86_64:core-4.0-x86_64:desktop-4.0-amd64:desktop-4.0-noarch:graphics-2.0-amd64:graphics-2.0-noarch:graphics-3.2-amd64:graphics-3.2-noarch:graphics-4.0-amd64:graphics-4.0-noarch
Distributor ID: openSUSE
Description: openSUSE Leap 15.1
Release: 15.1 …Run Code Online (Sandbox Code Playgroud) java ×10
java-8 ×4
java-stream ×4
hashmap ×2
java-11 ×2
java-14 ×2
collectors ×1
grouping ×1
hadoop ×1
java-10 ×1
java-9 ×1
java-record ×1
jenkins ×1
linux ×1
maven ×1
netbeans ×1
netbeans-11 ×1
optional ×1
tools.jar ×1