2015-01-19 3 views
1

У меня есть два ArrayList userActions и actionsToCheck типа enum Action.Поиск элементов ArrayList в ArrayList

Я хочу проверить, все ли элементы в actionsToCheck есть в userActions.

Является ли следующее достаточно хорошим или есть лучший способ?

private boolean actionsAllowed(ArrayList<Action> userActions, ArrayList<Action> actionsToCheck){ 
    return actionsToCheck.stream().allMatch(action-> actionAllowed(userActions,action)); 
} 

private boolean actionAllowed(ArrayList<Actions> userActions, Action action){ 
    return userActions.stream().anyMatch(userAction -> userAction == action); 
} 

ArrayList<Actions> userAction=new ArrayList<>(); 
userAction.add(ADD_USER); 
userAction.add(DELETE_USER); 
userAction.add(MODIFY_USER); 

ArrayList<Actions> actionsToCheck=new ArrayList<>(); 
actionsToCheck.add(ADD_USER); 
actionsToCheck.add(DELETE_USER); 

actionsAllowed(userAction,actionsToCheck) //should return true 
+2

Независимо от того, хорошо это или нет, оно не читается. Я предлагаю сделать из него предикатную функцию, называя ее хорошо и уменьшая «прикованные звонки с края потока». – msw

+0

добавил еще одну функцию и образец теста. лучше? – pallavt

ответ

2

Чтобы сделать ваш чек, вы можете просто использовать Collection.containsAll(collection).

Кроме того, я бы рекомендовал использовать EnumSet вместо ArrayList.

Смежные вопросы