У меня есть список объектов Java, каждый из которых содержит строковое значение (код). Также у меня есть карта Java. Я хочу проверить, включены ли все элементы ключей Map в список значений String.
Класс модели:
public class Obj {
private String code;
private String name;
private String uom;
public Obj(String code, String name, String uom) {
this.code = code;
this.name = name;
this.uom = uom;
}
}
реализация:
private static final Obj weight = new Obj("weight", "Weight", "Kg");
private static final Obj height = new Obj("height", "Height", "cm");
public static final List<Obj> objMasters = List.of(weight, height);
Set<String> keySet = map.keySet(); // returns the keyset values from the Map
boolean match =objMasters.stream()
.anyMatch(objMaster -> objMaster.getCode().matches(keySet.toString()));
Но с этой реализацией я всегда получаю false в качестве значения для совпадения. Что здесь пошло не так?




Из того, что я теперь понял о вашем вопросе, попробуйте это.
List<String> codes = objMasters.stream().map(obj -> obj.getCode()).collect(Collectors.toList());
boolean match = codes.containsAll(keySet);
«не работает. Он возвращает true для обоих, даже если есть элемент, который не входит в objMasters»
@UdaraSeneviratne Теперь это должно работать, если только ваш набор ключей не соответствует тому, что вы хотите проверить в списке.
но если значения карты пусты, все равно возвращается true
@UdaraSeneviratne ну, это крайний случай, если вы этого не хотите, просто поставьте и. логическое соответствие = code.containsAll(keySet) && !keySet.isEmpty();
Дальнейший сбор в Set будет лучше для обеспечения уникальных элементов и проверки их наличия.
0, когда вы используете коллекцию или карту, переопределите методы equals и hashCode /n1, вы можете глубоко изучить исходный код, например get(), contains() и другие методы. /n2, к тому времени ты не поймешь, почему
Вы говорите о «списке значений String», но показываете
List<Obj>в своем коде.