假设我在DB的表格中有以下记录。
这里的Emplid和date组合是我的主键。每次更改我都会保存记录的版本。(在最后3行中,共有3个版本作为数量变化)。
现在我想获取最新版本的记录,其中emplid=1111 date=28-02-2019(用户不知道数据库中有多少版本)。
我怎么能用lambda表达式呢。
HrcKey matchedKey = hrcKeyList.stream()
.filter(x -> (currEmplid.equals(x.getEmplid()) &&
format.format(updateListFromUI.getDate())
.equals(format.format(x.getDate()))))
.findFirst()
.orElse(null);
这会给我vesrion 1。但是我怎样才能得到最新的版本呢。
我会使用这个代码片段:
yourList.stream()
.filter(x -> currEmplid.equals(x.getEmplid())
.filter(x -> updatedHrcDbpRestatement.getExtr_effdt()
.equals(x.getExtr_effdt())
.max(comparingInt(HrcRestatementKey::getVersion))
.orElse(null);
简而言之,你可以做这样的事情,
employees.stream().
filter(hrc -> hrc.empid == 11 && hrc.date.equals("28-02-2000")).
min((o1, o2) -> o2.version - o1.version).orElse(null);
举个例子,
public static void main(String[] args) {
RnD rnD = new RnD();
rnD.test();
}
private void test() {
List<Hrc> employees = new ArrayList<>();
employees.add(new Hrc(11, "28-02-2000", 1));
employees.add(new Hrc(11, "28-02-2000", 2));
employees.add(new Hrc(11, "28-02-2000", 3));
employees.add(new Hrc(11, "30-02-2000", 1));
employees.add(new Hrc(22, "11-02-2000", 1));
Hrc topVersion= employees.stream().
filter(hrc -> hrc.empid == 11 && hrc.date.equals("28-02-2000")).
min((o1, o2) -> o2.version - o1.version).orElse(null);
System.out.println(topVersion);
}
private static class Hrc {
int empid;
String date;
int version;
public Hrc(int empid, String date, int version) {
this.empid = empid;
this.date = date;
this.version = version;
}
@Override
public String toString() {
return "Hrc{" +
"empid=" + empid +
", date='" + date + '\'' +
", version=" + version +
'}';
}
}
您可以使用max
通过比较version
值来获取最新的对象。
hrcRestatementKeyList.stream()
.filter(x -> (currEmplid.equals(x.getEmplid()) &&
format.format(updatedHrcDbpRestatement.getExtr_effdt())
.equals(format.format(x.getExtr_effdt()))))
.max(Comparator.comparingInt(HrcRestatementKey::getVersion))
.orElse(null);
1 Java8 Lambda表达式的介绍 Lambda表达式是Java8中包含的一项新的重要功能。它提供了一种简洁明了的方式来使用表达式表示一个方法接口。在Collection集合中非常有用。它有助于集合元素的迭代,过滤和从集合中提取数据。 Lambda表达式用于提供具有功能接口的接口的实现。它节省了大量代码。在使用Lambda表达式的情况下,我们无需再次定义用于提供实现的方法。我们只编写实现代码
问题内容: 我有一个表,其中存储了某些单词或单词组。我想选择以大写字母开头,没有空格且仅包含字母的条目。我的SQL看起来像这样: 我如何使用条件来做同样的事情? 问题答案: 尝试这个:
我在第42和43行出现错误:,未处理的异常类型InterruptedException。如果我尝试quickfix,它将创建带有catch异常的try catch,它将具有相同的错误,并将尝试以相同的方式修复它,继续用try catch包围它。
本文向大家介绍Java8之lambda表达式基本语法,包括了Java8之lambda表达式基本语法的使用技巧和注意事项,需要的朋友参考一下 lambda表达式,即带有参数的表达式,为更清晰地理解lambda表达式,先看如下例子: (1) (1)中代码调用Collections.sort方法对集合进行排序,其中第二个参数是一个类,准确地说是一个匿名内部类,sort方法调用内部类中的compare方法
本文向大家介绍Java8 Lambda表达式详解及实例,包括了Java8 Lambda表达式详解及实例的使用技巧和注意事项,需要的朋友参考一下 第一个Lambda表达式 在Lambda出现之前,如果我们需要写一个多线程可能需要下面这种方式: 上面的例子如果改成使用Lambda就会简单许多: Lambda表达式是一个匿名函数,将行为像数据一样传递,表达式使用 -> 将参数和主体分开, -> 前面是参
我最近接触了Java8,我正在尝试学习Lambda表达式。我想做一些图形计算,我的代码到目前为止: 所有这些代码都是用于图形的,除了和使用的操作之外,所有内容都是基本的数学(加、减、乘、模),并且可以单独针对每个像素执行。 现在的问题是:有可能在GPU上运行这个吗?或者这甚至是自动基于GPU的?(我记得在什么地方读到过这个,但我不确定)