Переопределение метода Содержит HashSet - PullRequest
3 голосов
/ 06 января 2010

Может кто-нибудь сказать мне, как я могу переопределить метод contains () HashSet, чтобы использовать совпадение с регулярным выражением вместо просто equals ()?

Или, если не переопределить, как я могу добавить метод для использования шаблона регулярных выражений? По сути, я хочу иметь возможность запускать регулярные выражения в HashSet, содержащем строки, и мне нужно сопоставлять подстроки с помощью регулярных выражений.

Если мой метод не подходит, пожалуйста, предложите другие.

Спасибо. :)

Ответы [ 2 ]

5 голосов
/ 06 января 2010

Вы можете расширить HashSet следующим образом:

public class RegExHashSet extends HashSet<String > {
    public boolean containsRegEx( String regex ) {
        for( String string : this ) {
            if( string.matches( regex ) ) {
                return true;
            }
        }
        return false;
    }
}

Тогда вы можете использовать его:

RegExHashSet set = new RegExHashSet();
set.add( "hello" );
set.add( "my" );
set.add( "name" );
set.add( "is" );
set.add( "tangens" );

if( set.containsRegEx( "tan.*" ) ) {
    System.out.println( "it works" );
}
2 голосов
/ 06 января 2010

Я бы предложил использовать Google Collections , в частности, метод Sets.filter Гораздо проще, чем пытаться создать подкласс для коллекции.

...