Сравнение JavaBeans

Вот решение, которое я придумал:

func checkParentheses(s: String) -> Bool {
    let pairs: [Character: Character] = ["(": ")", "[": "]", "{": "}"]
    var stack: [Character] = []
    for char in s {
        if let match = pairs[char] {
            stack.append(match)
        } else if stack.last == char {
            stack.popLast()
        } else {
            return false
        }
    }
    return stack.isEmpty
}

Тестовые случаи:

print(checkParentheses(s: "((({[]})))")) // True (Balanced)
print(checkParentheses(s: "((({[]}))")) // False (Not Balanced)
print(checkParentheses(s: "(]")) // False (Not Balanced)

Все, что мы здесь делаем, это итерация по каждому Character в String , Если мы найдем начальную скобку т.е. "(", тогда мы помещаем конечную скобку в стек, т. е. ")". Мы делаем это до тех пор, пока текущий символ является начальной скобкой.

Как только мы находим конечную скобку, она должна быть последним символом в стеке в зависимости от того, как мы их добавляли. Если это правда, тогда круглые скобки были действительны, и мы можем продолжить.

Если ничего из вышеперечисленного не соответствует действительности, у нас либо есть недопустимый символ (не скобки), либо случай, когда скобки не сбалансированы. С этим, как говорится, мы можем return false здесь.

После итерации каждого символа в строке наш стек будет пустым, если круглые скобки были сбалансированы. Если стек не пустой, это означает, что скобки не сбалансированы.

10
задан Michael Myers 12 January 2009 в 21:51
поделиться

2 ответа

BeanComparator свободного городского населения Apache - то, что Вы ищете.

Обновление. Простой пример, который сравнивает JavaBeans с одним свойством (comparation сделан agains только одним свойством, необходимо создать столько же BeanComparators сколько свойства, которым Вы хотите соответствовать).

import org.apache.commons.beanutils.BeanComparator;

public class TestBeanComparator
{
    public TestBeanComparator()
    {
    }

    public class TestBean
    {
        int value;

        public TestBean()
        {
        }

        public int getValue()
        {
            return value;
        }

        public void setValue(int value)
        {
            this.value = value;
        }
    }

    public static void main(String[] args)
    {
        TestBeanComparator tbc = new TestBeanComparator();

        tbc.go();
    }

    public void go()
    {
        TestBean tbs [] = new TestBean[10];

        for (int i = 0; i < tbs.length; i++)
        {
            tbs[i] = new TestBeanComparator.TestBean();
            tbs[i].setValue((int) (Math.random() * 10));

            System.out.println("TestBean["+i+"] = " + tbs[i].getValue());
        }

        BeanComparator bc = new BeanComparator("value");

        System.out.println("");
        System.out.println("Value to match: " + tbs[0].getValue());
        for (int i = 1; i < tbs.length; i++)
        {
            if(bc.compare(tbs[i], tbs[0]) == 0)
            {
               System.out.println("Match found in bean "+ i); 
            }
        }
    }
}

После некоторых тестов один результат успешен. Это - вывод:

TestBean[0] = 0
TestBean[1] = 4
TestBean[2] = 0
TestBean[3] = 2
TestBean[4] = 7
TestBean[5] = 3
TestBean[6] = 0
TestBean[7] = 3
TestBean[8] = 7
TestBean[9] = 3

Value to match: 0
Match found in bean 2
Match found in bean 6

Очевидно, увеличение размера массива TestBean увеличит возможности получить соответствия.

Необходимо импортировать к проекту следующие банки: commons-logging-version.jar, commons-beanutils-version.jar, commons-beanutils-core-version.jar, commons-beanutils-bean-collections-version.jar, commons-collections-version.jar.

Файлы включены во входе свободного городского населения, свободном-городском-населении-beanutils и API наборов свободного городского населения.

8
ответ дан 3 December 2019 в 23:15
поделиться

BeanComparator может использоваться для сортировки набора.
Это - a Comparator реализация, которая сравнивает бобы на основе общего значения свойства.

BeanComparators универсальные компараторы, которые могут реагировать на любой Боб Java. С хорошей базовой бобовой системой отражения они могут обработать боб со свойствами компонента, массивами, наборами и картами.

Если у нас есть a java.util.List из Бобов Java типа Person — - где Person имеет возраст, который это Integer, имя это - Строка и страна, это - боб Страны (который сам имеет Имя строки) — - мы можем отсортировать его так или иначе, мы хотим с a BeanComparator.

Некоторые примеры:

List people = ...; // list of Person objects

//sort by age
BeanComparator comp = new BeanComparator("age");
Collections.sort(list, comp);

//sort by name
BeanComparator comp = new BeanComparator("name");
Collections.sort(list, comp);

//sort by country name
BeanComparator comp = new BeanComparator("country.name");
Collections.sort(list, comp);

Нет никакой потребности записать a PersonComparator с большим количеством опций свойства отсортировать по. Вместо этого сингл BeanComparator класс заботится обо всем этом.


Вы найдете полный пример здесь со следующим сценарием:

При реализации компаратора для сравнения свойств динамично (например, думайте о сортировке строк в таблице на Веб-странице, на основе которого столбца клиент выбирает), то Вы могли отложить создавать свой компаратор, пока Вы не знали, какое свойство было выбрано для сортировки.

Это то, где BeanComparator действительно сияния. Значительные объемы кода, которые Вы обычно писали бы для реализации этого поведения, уменьшаются до нескольких строк, когда Вы используете BeanComparator.

6
ответ дан 3 December 2019 в 23:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: