相关疑难解决方法(0)

如何使用java8流对TreeSet的列表进行排序

我的列表包含类似的集合[1,3,5][2,6,4],大小相同.我试过这样做,但似乎没有用.

List<TreeSet<T>> block;
    for(TreeSet<T> t : block){
        block.stream().sorted((n,m)->n.compareTo(m)).collect(Collectors.toSet());

    }
Run Code Online (Sandbox Code Playgroud)

我想要的最终结果是[1,2,3][4,5,6].

我可以尝试添加在所有的元素ArrayList和那种出来再做出新ListTreeSet的.但是有一种衬垫吗?

更新:

List<T> list=new ArrayList<T>();
    for(TreeSet<T> t : block){

        for(T t1 : t)
        {
            list.add(t1);   

        }
    }

    list=list.stream().sorted((n,m)->n.compareTo(m)).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

这有效但可以简化吗?

java treeset java-8 java-stream

7
推荐指数
1
解决办法
661
查看次数

Java Stream 按 02 个字段分组并按 2 个 BigDecimal 字段的总和聚合

需要关于带有 groupingBy 的 Stream 案例的帮助我希望能够按 2 个不同的字段进行分组,并根据不同的分组获得其他 BigDecimal 字段的总和。这是我的实体:

    public class Customer {
        private String name;
        private String type;
        private BigDecimal total;
        private BigDecimal balance;

// Setter, getter

}
Run Code Online (Sandbox Code Playgroud)

假设我输入了这个列表:

Customer custa = new Customer("A", "STANDARD", new BigDecimal("1000"), new BigDecimal("1500"));
    Customer custa1 = new Customer("A", "VIP", new BigDecimal("2000"), new BigDecimal("2500"));
    Customer custb = new Customer("B", "STANDARD", new BigDecimal("3000"), new BigDecimal("3500"));
    Customer custc = new Customer("C", "STANDARD", new BigDecimal("4000"), new BigDecimal("4500"));
    Customer custa2 = new Customer("A", "VIP", new BigDecimal("1500"), new BigDecimal("2500")); …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

5
推荐指数
1
解决办法
91
查看次数

聚合两个以上的Java 8属性

我很简单

 class Per{
    int a;
    long b;
    double c;
    String d;
}
Run Code Online (Sandbox Code Playgroud)

假设我有3000个类型的对象Per并收集在一个List<Per> pers

现在我想实现: -

  • 如果跳过对象为空或dnullblank
  • 总和 a
  • 总和 b
  • 执行的操作的聚合值 c

老路是

int totalA = 0; long totalB = 0l; long totalC = 0l;
    for (Per per : pers) {
        if (per.d != null && !per.d.trim().equals("")) {
            totalA += per.a;
            totalB += per.b;
            totalC += someOperation(per.c);
        }
    }
Run Code Online (Sandbox Code Playgroud)

someOperation 实施并不重要,因为它可能简单或复杂.

如何通过Java8流和lambda表达式实现这一目标?

一个可能的答案是这样的

int totalA = 0; long totalB=0l;
     pers.stream().filter(p->{
         if(p …
Run Code Online (Sandbox Code Playgroud)

lambda field aggregate sum java-8

0
推荐指数
1
解决办法
122
查看次数

标签 统计

java-8 ×3

java ×2

java-stream ×2

aggregate ×1

field ×1

lambda ×1

sum ×1

treeset ×1