Java 8: Лямбда-выражение с условием where - PullRequest
3 голосов
/ 16 июня 2020

Допустим, у меня есть следующие записи в таблице в БД.

Empl table

Здесь комбинация Emplid и даты - мой ПК. При каждом изменении я поддерживаю версию записей. (в последних 3 строках всего 3 версии в виде изменения номера).

Теперь я хочу получить запись, где emplid = 1111 date = 28-02-2019 с последней версией (пользователь не знает, сколько версия находится в db).

Как я могу сделать это с помощью лямбда-выражения.

HrcKey matchedKey = hrcKeyList.stream()
             .filter(x -> (currEmplid.equals(x.getEmplid()) && 
                     format.format(updateListFromUI.getDate())
                                  .equals(format.format(x.getDate()))))
             .findFirst()
             .orElse(null);

это даст мне версию 1. но как я могу получить последнюю версию.

Ответы [ 3 ]

1 голос
/ 16 июня 2020

Вы можете использовать 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);
0 голосов
/ 16 июня 2020

Я бы go с этим фрагментом кода:

yourList.stream()
        .filter(x -> currEmplid.equals(x.getEmplid())
        .filter(x -> updatedHrcDbpRestatement.getExtr_effdt()
                                             .equals(x.getExtr_effdt())
        .max(comparingInt(HrcRestatementKey::getVersion))
        .orElse(null);
0 голосов
/ 16 июня 2020

короче, вы можете сделать что-то вроде этого,

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 +
                    '}';
        }
    }
...