当前位置: 首页 > 知识库问答 >
问题:

Java 8:带where条件的Lambda表达式

池永长
2023-03-14

假设我在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。但是我怎样才能得到最新的版本呢。

共有3个答案

东门城
2023-03-14

我会使用这个代码片段:

yourList.stream()
        .filter(x -> currEmplid.equals(x.getEmplid())
        .filter(x -> updatedHrcDbpRestatement.getExtr_effdt()
                                             .equals(x.getExtr_effdt())
        .max(comparingInt(HrcRestatementKey::getVersion))
        .orElse(null);
罗兴运
2023-03-14

简而言之,你可以做这样的事情,

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 +
                    '}';
        }
    }
农鸿德
2023-03-14

您可以使用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的?(我记得在什么地方读到过这个,但我不确定)