List bussList = new ArrayList<>(); bussList.add( new Buss( "a" , 10 , 0.3 )); bussList.add( new Buss( "b" , 3 , 0.8 )); bussList.add( new Buss( "c" , 5 , 2.0 )); bussList.add( new Buss( "b" , 30 , 3.2 )); bussList.add( new Buss( "c" , 20 , 0.1 )); List<Buss> st = new ArrayList<>(); bussList.stream() .collect(Collectors.groupingBy(Buss::getName)) //分组(Name can't be null) .forEach((k,v) -> { Optional<Buss> sum = v.stream().reduce((v1,v2) -> { //合并 v1.setCount(v1.getCount()+v2.getCount()); v1.setValue(v1.getValue()+v2.getValue()); return v1; st.add(sum.orElse( new Buss( "other" , 0 , 0.0 ))); System. out .println(st); class Buss { private String name; private int count; private double value ; public Buss (String name, int count, double value ) { this .name = name; this .count = count; this . value = value ; public String getName () { return name; public void setName (String name) { this .name = name; public int getCount () { return count; public void setCount ( int count) { this .count = count; public double getValue () { return value ; public void setValue ( double value ) { this . value = value ; @Override public String toString () { return "Buss{" + "name='" + name + '\'' + ", count=" + count + ", value=" + value + '}' ;

Output

[Buss{name='a', count=10, value=0.3}, Buss{name='b', count=33, value=4.0}, Buss{name='c', count=25, value=2.1}]

如何根据两个字段排序
可以再 model里面 ,写一个类似的方法即可
下例,分组的key 就是 name+value

public String groupField() {
        return getName()+"-"+getValue();
				
Map<Object,List<Instance>> collect = list.stream().collect(Collectors.groupingBy(t -> t.getRoomName())); 属性值即为Map的key. import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; public class Test<T> {
Stream多线程并行数据处理 将一个顺序执行的流转变成一个并发的流只要调用 parallel()方法 public static long parallelSum(long n){ return Stream.iterate(1L, i -&amp;amp;amp;amp;amp;gt; i +1).limit(n).parallel().reduce(0L,Long::sum);
JAVA8 操作List<Map<String,Object>> 按照某个KEY进行分组,然后合并Map数据案例 public static List<Map<String, Object>> mergeDataList(List<Map<String, Object>> mergeList,String mergeKey){ Set<String> set = new HashSet<>
可以使用Java 8的Stream API来实现这个功能。首先,我们需要通过类型对数据进行分组,可以使用Collectors.groupingBy()方法实现。然后,我们可以使用Map.keySet()方法获取所有键的集合,即类型集合。最后,我们可以使用flatMap()和collect()方法将每个类型的id集合合并为一个集合。以下是示例代码: ```java import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Data> dataList = Arrays.asList( new Data("type1", 1), new Data("type2", 2), new Data("type1", 3), new Data("type3", 4), new Data("type2", 5) Map<String, List<Integer>> groupedData = dataList.stream() .collect(Collectors.groupingBy(Data::getType, Collectors.mapping(Data::getId, Collectors.toList()))); List<Integer> idList = groupedData.keySet().stream() .flatMap(key -> groupedData.get(key).stream()) .collect(Collectors.toList()); System.out.println(idList); class Data { private String type; private int id; public Data(String type, int id) { this.type = type; this.id = id; public String getType() { return type; public int getId() { return id; 输出结果为: [1, 3, 2, 5, 4] 其中,Data类用于封装数据,包括类型和id两个属性。首先,我们定义了一个包含5个Data对象的列表dataList作为示例数据。然后,我们使用Stream API对数据进行分组,将相同类型的数据分为一组,并将每组数据的id集合收集到一个列表中。最后,我们使用flatMap()方法将每个类型的id列表合并为一个列表,并使用collect()方法收集结果到一个列表中。