Сравнение значений файла опоры со значениями серверной части - PullRequest
0 голосов
/ 06 августа 2020

Нужна помощь по приведенным ниже вопросам.

Я хочу прочитать значения из файла свойств и ключа и значения файла свойств, как показано ниже: org. cc .bu.combo = A1289 || B2234, A8976 || B7765

И я получу ключ и значение из бэкэнда как unit = A1289 и cost = B2234,

Я хочу сравнить значения свойств A1289 || B2234 с unit = A1289 и cost = B2234. Если он совпадает, то мне нужно напечатать с совпадением, в противном случае, чтобы печать не совпала.

Мне нужно записать. java файл, но в проекте Mule только для использования.

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Для этого в Java я создал простой класс:

package org.cc.bu.combo;

import java.util.Map;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class UnitChecker {
    
    static private Map<String, String> parseCombo(String combo) {
        Pattern pattern = Pattern.compile(",");
        Map<String, String> c = pattern.splitAsStream(combo)
                .map(s -> {
                    String[] parts = s.split("\\|\\|");
                    return parts;
                }).collect(Collectors.toMap(p -> p[0], p -> p[1]));
                
        return c;
    }
    
    static public boolean check(String combo, String unit, String cost) {
        Map<String, String> c = parseCombo(combo);
        String value = c.get(unit);
        return cost.equals(value);
    }
}

Его можно вызвать из потока следующим образом:

    <set-variable value="A1289||B2234,A8976||B7765" variableName="combos" />
    <java:invoke-static doc:name="Invoke static"  class="org.cc.bu.combo.UnitChecker" method="check(java.lang.String,java.lang.String,java.lang.String)">
        <java:args ><![CDATA[#[{combo: vars.combos, unit: 'A1289', cost: 'B2234' }]]]></java:args>
    </java:invoke-static>

Вам нужно добавить Java Модуль к проекту (всегда используйте последнюю версию), а также убедитесь, что вы компилируете с Java 8 совместимостью исходных текстов . Если вы еще этого не сделали, добавьте следующие свойства в pom:

<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
0 голосов
/ 06 августа 2020

Вам не нужно Java для этого. Это можно сделать в DataWeave.

Вход:

{
    "unit": "A1289",
    "cost" : "B2234"
}

Скрипт:

%dw 2.0
output application/json
var props = "A1289||B2234,A8976||B7765" // replace with 
p('org.cc.bu.combo')
fun parseProps(p)= p splitBy ',' map ($ splitBy '||') reduce ((item, acc={}) -> acc ++ {(item[0]): item[1]})
---
not isEmpty(parseProps(props) filterObject ((value, key, index) -> key ~= payload.unit and value ~= payload.cost))

Выход:

true
...