繁体   English   中英

Java 8 - 如何将数组列表转换为特定类对象的列表

[英]Java 8 - How to transform a List of arrays into a List of a specific class object

使用Java 8 Stream包我想将类型为object的数组List转换为特定类对象的List。 第一个列表中的数组包含从数据库加载的类的字段。

这是从DB加载的类型对象的数组列表:

List<Object[]> results = loadFromDB();

列表中的每个元素Object[]包含我要映射到以下类的字段:

class DeviationRisk {
    Timestamp plannedStart;
    Timestamp plannedEnd;
    String rcsName;
    BigDecimal riskValue;
    BigDecimal mediumThreshold;
    BigDecimal highThreshold;
    Interval interval;

    String getRcsName() {
        return rcsName;
    }

    DeviationRisk(Object[] res) {
        this((Timestamp) res[0], (Timestamp) res[1], (String) res[2], (BigDecimal) res[3], (BigDecimal) res[4], (BigDecimal) res[5]);

    }

    DeviationRisk(Timestamp start, Timestamp end, String rcs, BigDecimal risk, BigDecimal medium, BigDecimal high) {
        plannedStart = start;
        plannedEnd = end;
        rcsName = rcs;
        riskValue = risk;
        mediumThreshold = medium;
        highThreshold = high;
        interval = new Interval(plannedStart.getTime(), plannedEnd.getTime());
    }

    DeviationRisk create(Object[] res) {
              return new DeviationRisk(res);
          }

    List<DateTime> getRange() {
        return DateUtil.datesBetween(new DateTime(plannedStart), new DateTime(plannedEnd));
    }
}

正如您所看到的,原始列表中的每个元素Object[]都会results它只是对象DeviationRisk的数组表示

现在,我知道如何使用循环它只需3行代码 ,如下所示:

  List<DeviationRisk> deviations = new ArrayList<>();
        for (Object[] res : results) {
            deviations.add(new DeviationRisk(res));
        }

如何使用Java 8 Streams获得相同的结果?

您可以尝试:

List<DeviationRisk> result = results.stream()
                                    .map(DeviationRisk::new)
                                    .collect(Collectors.toList())

这样做:

final List<DeviationRisk> l = results.stream()
    .map(DeviationRisk::new).collect(Collectors.toList());

这项工作是因为DeviationRisk::new被编译器视为Function<Object[], DeviationRisk>

Java如何转换List<object> 从 JPA 到页面<div id="text_translate"><p>我对来自 Jpa 存储库的自定义搜索方法有疑问。 我将此方法实施到自定义 serach,在此方法中,我有来自我的 SQL 基础的<strong>列表</strong>,我尝试将其从 JPA 转换为<strong>页面</strong>object 这只是分页的错觉,因为在邮递员/互联网浏览器中,我看到列表中的所有元素,当我更改端点中的页面和大小值时,什么都没有改变。 有人知道如何帮助吗?</p><p> GitHub 项目: <a href="https://github.com/s0bieskii/DemoCarRental" rel="nofollow noreferrer">https://github.com/s0bieskii/DemoCarRental</a></p><p> <strong>我的端点来自 Controller:</strong></p><pre> @GetMapping("/find") ResponseEntity&lt;Page&lt;CarDTO&gt;&gt; readAllCarsFiltered(@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "5") int size, Pageable pageable, @RequestParam(required = false) String brand, @RequestParam(required = false) String model, @RequestParam(required = false) String type, @RequestParam(required = false) Integer registrationYear, @RequestParam(required = false) String color, @RequestParam(required = false) String fuel, @RequestParam(required = false) String transmission, @RequestParam(required = false) String doors, @RequestParam(required = false, defaultValue = "9999999999") double price) { return ResponseEntity.ok(carService.customerSearch(pageable, brand, model, type, registrationYear, color, fuel, transmission, doors, price)); }</pre><p> <strong>我的服务</strong></p><pre>public Page&lt;CarDTO&gt; customerSearch(Pageable pageable, String brand, String model, String type, Integer registrationNumber, String color, String fuel, String transmission, String doors, double price){ return carRepository.search(pageable, brand, model, type, registrationNumber, color, fuel, transmission, doors, price).map(car -&gt; carMapper.carToDto(car)); }</pre><p> <strong>我来自 RepositoryImplementation 的自定义搜索方法</strong></p><pre> @Override public Page&lt;Car&gt; search(Pageable pageable, String brand, String model, String type, Integer registrationYear, String color, String fuel, String transmission, String doors, double price) { int var = 0; CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery&lt;Car&gt; query = cb.createQuery(Car.class); Root&lt;Car&gt; car = query.from(Car.class); query.select(car); Predicate predicate = cb.greaterThan(car.get("id"), var); if (brand.= null) predicate = cb,and(predicate. cb.equal(car,get("brand"); brand)). if (model,= null) predicate = cb.and(predicate. cb,equal(car;get("model"). model)), if (type.= null) predicate = cb.and(predicate, cb;equal(car.get("type"), type)). if (registrationYear.= null) predicate = cb,and(predicate; cb.equal(car,get("registrationNumber"). registrationYear)). if (color,= null) predicate = cb;and(predicate. cb,equal(car.get("color"). color)), if (fuel.= null) predicate = cb;and(predicate. cb,equal(car.get("fuel"). Fuel,stringToFuelEnum(fuel))). if (transmission;= null) predicate = cb.and(predicate, cb.equal(car.get("transmission"), Transmission;stringToTransmissionEnum(transmission))). if (doors,= null) predicate = cb.and(predicate. cb,equal(car;get("doors"). doors)), if (price.= 0) predicate = cb.and(predicate, cb;lessThan(car.get("price"). price)). //predicate = cb;and(predicate, cb,equal(car.get("available"); available)); List&lt;Car&gt; carList=entityManager.createQuery(query.where(predicate)).getResultList(); return new PageImpl&lt;Car&gt;(carList, pageable,carList.size()); } }</pre></div></object>

[英]Java how to transform List<Object> to Page from JPA Paggination

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何将Java列表对象的特定字段转换为jsonarray 将Java列表转换为对象 如何使用 Java Stream 将接口列表转换为类列表 Java 将 Json 转换为 List<object><div id="text_translate"><p> 我有一个 json</p><pre> { "name":["A","B"], "class":"Science" }</pre><p> 如何将其转换为学生列表(A,科学)(B,科学)</p><pre> Students { public String name; public String class; }</pre></div></object> 在java中将对象列表转换为地图 将数组的 JSON 数组转换为特定类的 Java 列表 如何将 model 对象列表转换为 object arrays Z93F725A07423FE1C889F448B33ZD 列表 如何在Java中将对象列表转换为一行对象 Java如何转换List<object> 从 JPA 到页面<div id="text_translate"><p>我对来自 Jpa 存储库的自定义搜索方法有疑问。 我将此方法实施到自定义 serach,在此方法中,我有来自我的 SQL 基础的<strong>列表</strong>,我尝试将其从 JPA 转换为<strong>页面</strong>object 这只是分页的错觉,因为在邮递员/互联网浏览器中,我看到列表中的所有元素,当我更改端点中的页面和大小值时,什么都没有改变。 有人知道如何帮助吗?</p><p> GitHub 项目: <a href="https://github.com/s0bieskii/DemoCarRental" rel="nofollow noreferrer">https://github.com/s0bieskii/DemoCarRental</a></p><p> <strong>我的端点来自 Controller:</strong></p><pre> @GetMapping("/find") ResponseEntity&lt;Page&lt;CarDTO&gt;&gt; readAllCarsFiltered(@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "5") int size, Pageable pageable, @RequestParam(required = false) String brand, @RequestParam(required = false) String model, @RequestParam(required = false) String type, @RequestParam(required = false) Integer registrationYear, @RequestParam(required = false) String color, @RequestParam(required = false) String fuel, @RequestParam(required = false) String transmission, @RequestParam(required = false) String doors, @RequestParam(required = false, defaultValue = "9999999999") double price) { return ResponseEntity.ok(carService.customerSearch(pageable, brand, model, type, registrationYear, color, fuel, transmission, doors, price)); }</pre><p> <strong>我的服务</strong></p><pre>public Page&lt;CarDTO&gt; customerSearch(Pageable pageable, String brand, String model, String type, Integer registrationNumber, String color, String fuel, String transmission, String doors, double price){ return carRepository.search(pageable, brand, model, type, registrationNumber, color, fuel, transmission, doors, price).map(car -&gt; carMapper.carToDto(car)); }</pre><p> <strong>我来自 RepositoryImplementation 的自定义搜索方法</strong></p><pre> @Override public Page&lt;Car&gt; search(Pageable pageable, String brand, String model, String type, Integer registrationYear, String color, String fuel, String transmission, String doors, double price) { int var = 0; CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery&lt;Car&gt; query = cb.createQuery(Car.class); Root&lt;Car&gt; car = query.from(Car.class); query.select(car); Predicate predicate = cb.greaterThan(car.get("id"), var); if (brand.= null) predicate = cb,and(predicate. cb.equal(car,get("brand"); brand)). if (model,= null) predicate = cb.and(predicate. cb,equal(car;get("model"). model)), if (type.= null) predicate = cb.and(predicate, cb;equal(car.get("type"), type)). if (registrationYear.= null) predicate = cb,and(predicate; cb.equal(car,get("registrationNumber"). registrationYear)). if (color,= null) predicate = cb;and(predicate. cb,equal(car.get("color"). color)), if (fuel.= null) predicate = cb;and(predicate. cb,equal(car.get("fuel"). Fuel,stringToFuelEnum(fuel))). if (transmission;= null) predicate = cb.and(predicate, cb.equal(car.get("transmission"), Transmission;stringToTransmissionEnum(transmission))). if (doors,= null) predicate = cb.and(predicate. cb,equal(car;get("doors"). doors)), if (price.= 0) predicate = cb.and(predicate, cb;lessThan(car.get("price"). price)). //predicate = cb;and(predicate, cb,equal(car.get("available"); available)); List&lt;Car&gt; carList=entityManager.createQuery(query.where(predicate)).getResultList(); return new PageImpl&lt;Car&gt;(carList, pageable,carList.size()); } }</pre></div></object> 将对象数组列表转换为Java中的对象列表
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM