Java Set是否保留订单?一个方法正在向我返回一个Set,并且假设数据是有序的但是迭代了Set,数据是无序的.有没有更好的方法来管理这个?是否需要更改方法以返回除Set之外的其他内容?
让我们假设我有一个Stream<T>并且想要只获得不同的元素并进行排序.
天真的方法是做到以下几点:
Stream.of(...)
.sorted()
.distinct()
Run Code Online (Sandbox Code Playgroud)
或者,也许相反:
Stream.of(...)
.distinct()
.sorted()
Run Code Online (Sandbox Code Playgroud)
由于JDK的源代码无法实现这两者的实现,我只是想知道可能的内存消耗和性能影响.
或者编写我自己的过滤器会更有效率如下?
Stream.of(...)
.sorted()
.filter(noAdjacentDuplicatesFilter())
public static Predicate<Object> noAdjacentDuplicatesFilter() {
final Object[] previousValue = {new Object()};
return value -> {
final boolean takeValue = !Objects.equals(previousValue[0], value);
previousValue[0] = value;
return takeValue;
};
}
Run Code Online (Sandbox Code Playgroud) 我试图扫描JEP-286关于本地类型推断.我看到这只适用于局部变量 - 理解.所以这确实有效:
public class TestClass {
public static void main(String [] args){
var list = new ArrayList<>();
list.add("1");
System.out.println(list.get(0)); // 1
}
}
Run Code Online (Sandbox Code Playgroud)
我确实看到这另一方面没有编译:
public class TestClass {
public var list = new ArrayList<>();
public static void main(String [] args){
}
}
Run Code Online (Sandbox Code Playgroud)
很明显它没有,因为JEP这样说.现在我的问题:
对于被宣布为var失败的公共/受保护成员,至少是IMO,这是完全合理的.但是为什么它不能编译,即使它是private?我只能假设你仍然可以通过反射获得该变量(我不能得到这样的局部字段)......并且获得该变量需要一个演员,好吧,一个非常困惑的演员可能.