1

私は次のコードを持っています。私がする必要があるのは、アイテム オブジェクト リストにインスタンス (型オブジェクト) を追加することです (最後の if で行われます) が、完全なキーの一致を見つける必要があります。fromProp と toProp は、このインスタンスのフィールド タイプ オブジェクトです (キーは username 、 customer 、number、f1 などになります)。現在、コードは最初の一致フィールド (最後の if ステートメント内) で動作しています。最初の一致が見つかった場合は、データを項目リストに追加しますが、完全なキー一致を見つけたい、つまり 3 つのキーがある場合は、項目オブジェクトに「toEntityInstance」を追加するよりも完全に一致します。どうすればいいですか?

for (Object fromEntityInstance : fromEntityInstances) {

            List<Object> itemObject = new ArrayList<Object>();

            for (String[] prop : depPropMappings) {

                // Get properties related keys
                fromProp = prop[0];
                toProp = prop[1];

                Object fromValue = getInstanceValue(fromProp, fromEntityInstance);

                for (Object toEntityInstance : toEntityInstances) {

                    Object toValue = getInstanceValue(toProp, toEntityInstance);

                    if (fromValue.equals(toValue)) {

                    itemObject.add(toEntityInstance);

                    }

                }
            }

たとえば、エンティティは fromEntityInstanceにすることができます

f1=Mark
f2=abc
f3=test1
f4=test1
f5=test1

toEntityInstance

f1=Mark
f2=abc
f3=test1
f4=test1
f5=test1

f1=Mark
f2=abc
f3=test1
f4=test1
f5=test1

f1=jhon
f2=yyyy
f3=test1
f4=test1
f5=test1

depPropMappings には、キーのインスタンスが 2 つあります。

最初のインスタンス

  fromProp = f1;
  toProp = f1;

2 番目のインスタンス

 fromProp = f2;
 toProp = f2;

そのため、 toEntityInstance から itemObject に最初の 2 つのエンティティ ( f1=mark & f2=abc ) だけを追加する必要があります。現在、f1 の一致が見つかったが F2 を無視した場合、コードは機能します...

最初にキーの数を数えようと思います。キーの数が一致している場合は、リストを更新しますが、その方法がわかりません

4

1 に答える 1

1

ループのネストの順序が間違っています。toEntityInstance両方がdepPropMappings一致する場合、現在のコードはリストに 2 回追加されます。次のようなことを試してください:

for (Object fromEntityInstance : fromEntityInstances) {

    List<Object> itemObject = new ArrayList<Object>();

    for (Object toEntityInstance : toEntityInstances) {
        boolean matches = true;

        for (String[] prop : depPropMappings) {

            // Get properties related keys
            fromProp = prop[0];
            toProp = prop[1];

            Object fromValue = getInstanceValue(fromProp, fromEntityInstance);
            Object toValue = getInstanceValue(toProp, toEntityInstance);

            // Note: Make sure that fromValue cannot be null. If this cannot be
            // guaranteed, add a check here.
            if (!fromValue.equals(toValue)) {
                // if any value mismatches, we can stop checking the remaining
                // properties.
                matches = false;
                break;
            }
        }

        if (matches) {
            // all properties match
            itemObject.add(toEntityInstance);
        }
    }
}
于 2013-04-05T06:08:36.403 に答える