有没有可能收集一个优先级流,以便我在某个对象上进行distinct和在另一个对象上筛选max值。
示例:
class Foo {
private Localdate date;
private Integer cash;
}
List<Foo> myNewFoo = foos.streams().distinct(SOMETHING).collect(toList())
// distinct date, if more than one date of same value then choose max value of cash.
一个选项是:按cash
降序对对象进行排序。然后使用包装set
的方法跟踪已看到的日期,并用它筛选流(set::add
如果尚未包含指定的元素,则返回true)。
public static void main(String[] args) {
List<Foo> foos = new ArrayList<>();
foos.add(new Foo(LocalDate.of(2021, 6, 1), 600));
foos.add(new Foo(LocalDate.of(2021, 6, 3), 200));
foos.add(new Foo(LocalDate.of(2021, 6, 4), 300));
foos.add(new Foo(LocalDate.of(2021, 6, 2), 400));
foos.add(new Foo(LocalDate.of(2021, 6, 3), 800));
foos.add(new Foo(LocalDate.of(2021, 6, 1), 300));
List<Foo> myNewFoo = foos.stream()
.sorted(Comparator.comparing(Foo::getCash).reversed())
.filter(distinctByDate())
.collect(Collectors.toList());
System.out.println(myNewFoo);
}
public static Predicate<Foo> distinctByDate() {
Set<LocalDate> seen = new HashSet<>();
return foo -> seen.add(foo.getDate());
}
结果:
[(2021-06-03,800), (2021-06-01,600), (2021-06-02,400), (2021-06-04,300)]
根据优先表,一元后缀递增和递减运算符比关系运算符有更多的优先级,那么为什么在这样的表达式(x++>=10)中,关系运算符首先计算,然后变量递增呢?
问题内容: Java API线程优先级(1-10)如何转换为操作系统级别的优先级,因为大多数操作系统没有与此相匹配的线程优先级别(就数量而言)。 因此请记住,在某些情况下,具有不同优先级的两个或多个线程最终会在OS级别获得相同的优先级。 如果我的理解有需要更正,请澄清。 问题答案: 实际上,某些优先级可以映射到相同的“本地”优先级。这是列表(基于OpenJDK 6中的Hotspot代码): Sol
主要内容:1 什么是Java 线程优先级,2 Thread类线程优先级常量,3 Java 线程优先级的例子1 什么是Java 线程优先级 每个线程都有一个优先级。优先级由1到10之间的数字表示。在大多数情况下,线程计划会根据线程的优先级来调度线程(称为抢先式调度)。但是不能保证一定被调用,因为是否被调用取决于JVM选择谁来调度。 2 Thread类线程优先级常量 public static int MIN_PRIORITY public static int NORM_PRIORITY publ
问题内容: 鉴于流,例如, 如何最优雅地将其转换为给定形式: (当然,假设我已经定义了Pair类)? 编辑:这不严格有关整数或原始流。对于任何类型的流,答案应该是通用的。 问题答案: 我的StreamEx库扩展了标准流,它pairMap为所有流类型提供了一种方法。对于原始流,它不会更改流类型,但可用于进行一些计算。最常见的用法是计算差异: 对于对象流,你可以创建任何其他对象类型。我的库没有提供任何
问题内容: 有人可以解释一下G1垃圾收集器的工作原理吗?我还无法在任何地方找到任何全面,易于理解的描述。 谢谢 问题答案: 收集器将堆分成固定大小的区域,并跟踪这些区域中的实时数据。它将一组指针(“记住的集”)保留在区域内和区域外。当认为有必要使用GC时,它将首先收集实时数据较少的区域(因此,“垃圾优先”)。通常,这意味着一步就可以收集整个区域:如果进入一个区域的指针数量为零,则无需对该区域进行标
我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。