2017-07-12 97 views
2

對不起,我的英文。我需要使用正則表達式通過名稱來過濾List<Contact>,並獲得新名稱List<Contact>,其中名稱與正則表達式匹配。聯繫人有兩個字段名稱和ID。如何從請求中獲取參數爲regex的數據?

例如

也許這樣的事情,但我不知道如何選擇一個名字,並用正則表達式比較去做。

Pattern pattern = Pattern.compile("..."); 

List<String> matching = list.stream() 
     .filter(pattern.asPredicate()) 
     .collect(Collectors.toList()); 

我該怎麼做?

+1

對於具體的例子「返回接觸不以b啓動」,我會而是使用'.filter(contact - > contact.getName()。chatAt(0)!='B')',假設聯繫人通常具有非空名稱... – Holger

回答

3

您可以通過名稱篩選List<Contact>。例如:

Pattern pattern = Pattern.compile("..."); 

List<Contact> matched = list.stream() 
    .filter(it -> it!=null && it.getName()!=null && pattern.matcher(it.getName()).matches()) 
    .collect(Collectors.toList()); 

使用過濾器鏈使代碼更富有表現力,例如OR

List<Contact> matched = list.stream() 
          .filter(Objects::nonNull) 
          .filter(it -> it.getName() != null) 
          .filter(it -> pattern.matcher(it.getName()).matches()) 
          .collect(Collectors.toList()); 
+0

我在手機上需要自己測試, :)。 –

+0

如果我使用它,我得到列表但不是列表,是不是? –

+0

@alexsafsafsd對不起。我在手機上。現在呢? –