2015-11-29 2 views
0

Для моей конкретной задачи я пытаюсь проверить, попало ли слово в определенный набор части речи. Это можно сделать так:Как проверить, соответствует ли вход произвольному количеству правил в Java?

private boolean validate(String word) { 
    if (isNoun(word) || isVerb(word) || isParticiple(word) || ...) 
     return true; 
    else 
     return false; 
} 

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

Любые мысли о том, как я могу сделать свой код чище и лучше при масштабировании?

+0

Можете ли вы уточнить, что вы подразумеваете под «чистым и более масштабируемым»? – cimmanon

+0

Предпочтительно, если вы можете размещать отдельные вопросы, а не комбинировать свои вопросы в одном. Таким образом, это помогает людям отвечать на ваш вопрос, а также другим, охотящимся хотя бы на один из ваших вопросов. Благодаря! –

+0

Хорошо, я переведу свое редактирование на отдельный, спасибо. EDIT: переехал сюда: http://stackoverflow.com/questions/33986324/how-to-implement-a-predicate-in-java-used-for-cross-checking-a-string-against-an –

ответ

1

Там уверен. Вы можете построить (или передать) в List< Predicate <String>>, а затем над ним, как так:

// rules being the predicate list 
boolean valid = true; 
for (Predicate<> rule : rules) { 
    valid = valid && rule.test(word); 
} 
// At the end of this valid will only remain true if all of the rules pass. 
+0

Спасибо за помощь! Я искал предикат, потому что раньше не использовал его. Некоторые примечательные ссылки: https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html; http://stackoverflow.com/questions/2955043/predicate-in-java; http://www.java2s.com/Tutorials/Java/java.util.function/Predicate/index.htm Я вставляю в свой код, так как я не уверен, как реализовать Предикат в контексте моего код. –

+0

Более конкретно, как я могу составить список правил, содержат ссылки на поддерживаемые методы поддержки, которые я реализовал. То, что я хочу сделать по существу, - передать строку (слово) и перекрестно проверить ее на несколько методов, которые возвращают true или false, а затем логически И эти выходы. –