Очень важно понимать, что потоковый API, предоставляемый Java, является не просто API, но и другой парадигмой программирования. Когда вы используете потоки, вы должны принять эту парадигму. Вы указываете потокам, чего хотите достичь, а не как хотите этого достичь . И, как и во многих других случаях, использование потоков не всегда является лучшим решением. Иногда использование простых старых циклов foor делает код более легким для чтения и, вероятно, также более эффективным.
Использование потоков
Если вы хотите использовать потоки в этом примере, вы можете сделать нечто подобное, как показано ниже.
Насколько я могу судить, вы пытаетесь найти элементы, которые (по некоторым критериям) одинаковы. Другими словами, вы хотите сгруппировать элементы на основе значения свойства объекта Model
.
Допустим, наш класс Model
выглядит следующим образом:
public class Model {
private int id;
private String name;
public Model(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
}
В приведенном ниже примере показано, как группировать элементы списка моделей на основе их названий.
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
public class CompareItems {
public static void main(String[] args) {
List<Model> items = Arrays.asList(
new Model(1, "model_1"), new Model(2, "model_2"), new Model(3, "model_1"),
new Model(4, "model_3"), new Model(5, "model_2"), new Model(6, "model_2"));
Map<String, Set<Integer>> result =
items.stream()
.collect(Collectors.groupingBy(Model::getName, Collectors.mapping(Model::getId, Collectors.toSet())));
System.out.println(result);
}
}
Когда вы печатаете объект result
, вы получите следующее:
{model_1=[1, 3], model_3=[4], model_2=[2, 5, 6]}
В объекте result
у вас есть имя модели и идентификаторы:все объекты модели с одинаковыми именами.
В зависимости от того, что вы хотите сделать, вы можете применить изменения к каждой группе, перебирая объект result
.