Java. Множество Set удалить элементы

176
16 марта 2018, 13:36

Почему подчеркивает параметр передаваемый в метод removeAllNumbersMoreThan10?

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.*;
public class DeletMoreThan10 {
    /* Удалить все числа больше 10
Создать множество чисел(Set<Integer>), занести туда 20 различных чисел.
Удалить из множества все числа больше 10.
*/
    public static void main(String[] args) {
        Set<Integer> beginset = new HashSet<>();
        for (int i=0; i<10; i++) {
            beginset.add((int)(Math.random()*100));
        }
        for (Integer i : beginset) {
            System.out.println(i);
        }
        Set<Integer> endset = new HashSet<>();
            endset = removeAllNumbersMoreThan10(beginset);
        for (Integer i : endnset) {
            System.out.println(i);
        }
            }
        public static HashSet<Integer> removeAllNumbersMoreThan10(HashSet<Integer> set)
        {
            Iterator<Integer> iterator = set.iterator();
            while ( iterator.hasNext())
            {
                Integer number = iterator.next();
                if (number > 10)
                    iterator.remove();
            }
            return (HashSet)set;
        }
Answer 1

Почему подчеркивает параметр передаваемый в метод removeAllNumbersMoreThan10?

Потому что метод принимает HashSet, а вы передаете Set. Правильно - изменить тип аргумента метода на интерфейс - его логика никак не зависит от конкретной реализации Set-а.

Set<Integer> endset = new HashSet<>();
endset = removeAllNumbersMoreThan10(beginset);

Метод removeAllNumbersMoreThan10 удаляет элементы из первоначального Set-a и поэтому endset и beginset - это один и тот же объект. Поэтому вы можете сделать void removeAllNumbersMoreThan10 и работать после удаления с beginset, т.е.:

for (Integer i : beginset) {
    System.out.println(i);
}
removeAllNumbersMoreThan10(beginset);
for (Integer i : beginset) {
    System.out.println(i);
}

PS: при использовании Java 8 удаление можно сделать в одну строку:

beginset.removeIf(value -> value > 10);

а вывод в консоль:

beginset.forEach(System.out::println);
READ ALSO
Считывание текста из файла в java

Считывание текста из файла в java

Мне нужно считать весь текст из файла в javaЯ знаю, как можно считывать текст построчно, знаю, как считать байты в массив

181
Как в java с наиболее меньшим объемом кода сохранить только сами значения полей объекта в массив байт?

Как в java с наиболее меньшим объемом кода сохранить только сами значения полей объекта в массив байт?

Имеется объект с большим количество полей типа байт и массив байт, как можно с наиболее меньшим объемом кода сохранить только сами значения...

184
Как добавить ресурсные файлы в jar

Как добавить ресурсные файлы в jar

Реп - https://githubcom/MichelShumaher/System-of-Testing

180
Передвижение коллекции &ldquo;по кругу&rdquo;

Передвижение коллекции “по кругу”

Представим, что есть коллекция целочисельных значенийНапример, 1 5 8 3 0 15 7

146