【问题标题】:Split list into slots of X value将列表拆分为 X 值的插槽
【发布时间】:2019-01-27 18:15:12
【问题描述】:

我在我的 Java 应用程序中有一个列表,它是一个自定义对象的列表,所以假设这些对象具有称为 A 的属性,那么另一个始终相同的对象具有另一个值,称为 B。您进行计算在列表中的每个 A 元素和固定的 B 值之间,你会得到一个 double 值,并且这些值的范围从 0 到无穷大,Id 需要将这些值拆分到插槽中,例如,在最终的排序列表中其计算结果在 0 到 50 之间的对象应该在排序列表中排在第一位,然后是在 50 到 100 之间的对象,等等。我该如何实现呢?

double valueA = 40; //some random number as an example

List<MyCustomType> list = ...

现在列表中的每个项目都有一个道具,其值与 valueA 进行比较,因此列表中的每个项目都会有不同的计算值,这就是我想要排序的值。

【问题讨论】:

  • 结果列表应该是flat还是bucket?如果是平的,只需按该计算值对项目进行排序。如果是 bucketet,只需创建一个列表列表并相应地添加项目。
  • 这不是免费的代码编写服务。到目前为止你尝试了什么?请edit您的问题并将您的代码发布为minimal reproducible example!运行时发生了什么?你期望会发生什么?您具体遇到了什么问题?
  • 我如何按计算值对项目进行排序?

标签: java list sorting


【解决方案1】:

您可以使用 Java 8 流功能根据您的要求拆分数据,以下是相同的示例:

   public class DateTest {

        public static void main(String[] args) {

            List<Division> divList = new ArrayList<>();

            divList.add(new Division(50, 7));
            divList.add(new Division(718, 9));
            divList.add(new Division(38, 9));
            divList.add(new Division(37, 4));

            Function<Division, Integer> condition = s -> {
               return ((s.x / s.y) > 50) ? 1 : 0;
            };
            Map<Integer, List<Division>> collect = divList.stream().collect(
                    Collectors.groupingBy(condition));

            System.out.println(collect.toString());
        }
    }

【讨论】:

    猜你喜欢
    • 2020-10-01
    • 2011-05-26
    • 2019-04-06
    • 1970-01-01
    • 2011-05-18
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多