我有一个地图列表,其中每个地图只有one key-value pair一个。我需要将其转换为仅键列表。我正在尝试使用流,如下所示:
List<Map<Long, String>> lst = // some data
List<Long> successList = lst.stream().map(ele -> ele.keySet().toArray()[0]).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但是我最终收到以下错误:
java: incompatible types: inference variable T has incompatible bounds
equality constraints: java.lang.Long
lower bounds: java.lang.Object
Run Code Online (Sandbox Code Playgroud)
如何解决此问题,或者有什么更好的方法?
我知道Optional.ofNullable()值是否也可以为null。我的问题是,为什么还没有默认行为Optional.of()呢?如果值不能是null,为什么要放在Optional第一个?如果结果还是为空,那么无论如何您都会得到一个NPE。如果您Optional使用of()方法构造一个,那么您仍然会拥有Optional包装器的所有其他方法,只有在值可以为的情况下,它们才真正有目的null。
编辑:我已经阅读了为什么在Optional.ofNullable上使用Optional.of?在发布此消息之前,但答案是“因为您可以更快地发现错误,并且以这种方式进行跟踪更容易”。但是我有点不同意,也许您的堆栈跟踪中会包含一些额外的行,但是仍然很容易查明NPE的来源。
假设我有一个对象列表,可称其为具有数量和价格作为字段的对象Order。
例如如下:
对象Order(字段quantity和price)列表包含以下值:
Quantity Price
5 200
6 100
3 200
1 300
Run Code Online (Sandbox Code Playgroud)
现在,我想使用Java-8来获取以以下方式过滤的列表:
Quantity Price
8 200
6 100
1 300
Run Code Online (Sandbox Code Playgroud)
价格是要过滤的唯一值,并对价格具有的任何数量进行求和,我想以此为基础形成一个新列表。
请建议我如何使用Java 8 Lambda表达式来完成此操作,谢谢。
我需要将UTC的时间转换为不同时区的时间。示例:UTC时间为1389556017000,以美国/蒂华纳时区为纪元。
public static void main(String[] args) {
Long epoch_date = 1389556017000L;
ZonedDateTime date1= Instant.ofEpochMilli(epoch_date)
.atZone(ZoneId.of("America/Tijuana"));
long epoch_second = date1.toInstant().toEpochMilli();
System.out.println("Epoch time in new timezone is :" + epoch_second);
}
Run Code Online (Sandbox Code Playgroud)
我的输出与输入相同...
我想知道官方Java核心API是JDK还是JRE的一部分。
根据对Java的理解,我认为核心API应该是JRE的一部分,因为该应用程序应该可以在没有JDK提供的附加功能的情况下运行。
我还在网上找到了一些信息,说JDK的3个基本组件是:
(由于JRE是JVM的实现,因此Java API属于JRE还是JDK?)
编辑:实际问题:Java API是否包含在JRE中?
最近,我想知道Runnable经常在功能上下文中使用。同时,根据javadoc,它的语义非常接近多线程,但在这种情况下并没有使用它:
Runnable接口应该由实例打算由线程执行的任何类实现。该类必须定义一个没有参数的方法,称为run。该接口旨在为希望在活动状态下执行代码的对象提供通用协议。例如,Runnable由Thread类实现。处于活动状态仅表示线程已启动但尚未停止。
是Runnable相当于Supplier<Void>?或Runnable等同于Function<Void,Void>,为什么不是供应商呢?Runnable如何与已经提供的功能接口的java.util.function包对齐。
我试图以ArrayList<Person>相反的顺序对此进行排序,但这无法编译
List<Person> newList = arrayList.stream()
.sorted(Comparator.reverseOrder(Person::getAge)) //Error
.limit(3)
.collect(Collectors.toList());
newList.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以对流进行反向排序吗?
说我有一张地图清单
List<Map<String, Double>> maps = new ArrayList<>();
Map<String, Double> map1 = new HashMap();
map1.put("height",60D);
map1.put("weight",144D);
maps.add(map1);
Map<String, Double> map2 = new HashMap();
map2.put("height",63D);
map2.put("weight",192D);
maps.add(map2);
Run Code Online (Sandbox Code Playgroud)
等等...
创建身高或体重列表的最快方法是什么?像列表高度之类的东西。
经典的方法是浏览地图,使用if条件并搜索高度键,然后如果找到高度键,则将其添加到返回列表中。
使用流执行此操作的等效方法是什么?
Java-8带有Function和BiFunction。我们如何链接多个Function或Bifunction实例。这样一个人的输出成为另一个人的输入Function。我创建了简单的函数和双功能来说明。
import java.util.function.BiFunction;
import java.util.function.Function;
class FunctionSample1 {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> mul = (x, y) -> {
return x * y;
};
BiFunction<Integer, Integer, Integer> div = (x, y) -> {
return x / y;
};
BiFunction<Integer, Integer, Integer> sum = (x, y) -> {
return x + y;
};
BiFunction<Integer, Integer, Integer> sub = (x, y) -> {
return x - y;
}; …Run Code Online (Sandbox Code Playgroud) 我已经列出了成对的。我想先根据键对它们进行排序,如果键相同,则根据值进行排序。
我尝试了以下代码,但引发了不兼容类型的异常:无法推断类型变量T
List<Pair<Integer,Integer>> list = new ArrayList<>();
list.sort(Comparator.comparingInt(Pair::getKey).thenComparingInt(Pair::getValue);
Run Code Online (Sandbox Code Playgroud)
错误:
不兼容的类型:无法推断类型变量T (参数不匹配;类对中的无效方法引用方法getKey无法应用于所需的给定类型:未找到参数:对象原因:实际和正式参数列表的长度不同)
其中T,K,V是类型变量:T扩展在方法compareInt(ToIntFunction)中声明的对象K扩展在类Pair中声明的对象V扩展在类Pair中声明的对象