2014-11-15 2 views
0

У меня есть список массив, объявленный как это:Xtend: фильтровать ArrayList цепочек

вал aName = новый ArrayList

добавить имена в этом массиве с помощью дополнения().

Когда я печатаю их, я хочу только напечатать конкретные имена (например, все с именами «Charlie» и работать в отделе Finance).

В моих цикл, у меня есть это:

for (m: aName.filter[!CDirectoryFacade::instance.isNameUsed(toString)]) 
{ 
    print(m) 
} 

Петля выше не печатали имя на всех. Поскольку моя функция isNameUsed() не получили строку, как я ожидал, а он получает адрес в виде строки

[email protected] 

Однако, я, кажется, не имеют проблем, когда я не использую фильтр().

for (m: aName) 
{ 
    if (!CDirectoryFacade::instance.isNameUsed(m)) 
    { 
    print(m) 
    }   
} 

Может ли кто-нибудь предложить, как использовать фильтр() со строками?

ответ

0

Трудно сказать, потому что ваш фрагмент кода не предоставляет никаких типов, и неясно, где name происходит из выражения print. Но приведенный выше код, вероятно, следует читать, как это:

for (m: aName.filter[!CDirectoryFacade::instance.isNameUsed(toString)]) 
{ 
    print(m.name) // instead of print(name) 
} 

Я мог бы быть еще более кратким:

aName.filter[!CDirectoryFacade::instance.isNameUsed(toString)].forEach[ print(name) ] 
+0

был опечатка. Он должен быть напечатан (m), так как его ArrayList строк. Внутри isNameUsed() я напечатал то, что получил (что такое содержимое «toString»). Но я не получаю имя. Я получаю это: [email protected] –

+0

Просьба поделиться всем телом метода. Я пытался воспроизвести, но код работал на меня. Какую версию Xtend вы используете? –