小编Ekl*_*vya的帖子

Java 8 流将 List<Map<>> 通过相同的 <Key, Value> 分组到新的 List<Map<>>

我有一个List<Map<String,String>> 这样的:

Map<String, String> m1 = new HashMap<>();
m1.put("date", "2020.1.5");
m1.put("B", "10");

Map<String, String> m2 = new HashMap<>();
m2.put("date", "2020.1.5");
m2.put("A", "20");

Map<String, String> m3 = new HashMap<>();
m3.put("date", "2020.1.6");
m3.put("A", "30");

Map<String, String> m4 = new HashMap<>();
m4.put("date", "2020.1.7");
m4.put("C", "30");

List<Map<String, String>> before = new ArrayList<>();
before.add(m1);
before.add(m2);
before.add(m3);
before.add(m4);
Run Code Online (Sandbox Code Playgroud)

我期望的结果是生成一个新的 List 映射,该映射按 date 分组,并将同一日期中设置的所有条目放在一起,例如:

[{"A":"20","B":"10","date":"2020.1.5"},{"A":"30","date":"2020.1.6"},{"C":"30","date":"2020.1.7"}]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法,但始终不是我期望的结果。

stream().flatmap().collect(Collectors.groupingBy())
Run Code Online (Sandbox Code Playgroud)

对这个问题的一些附加评论:

我为 LOOP 解决了这个问题,但是当列表大小约为 50000 时应用程序挂起,所以我寻求一种更好的性能方法来做到这一点。据我所知,Java 8 流平面地图可能是一种方式。所以关键不仅是重新映射这个,而且是用最高效的方式来做到这一点。

java java-8 java-stream collectors groupingby

5
推荐指数
2
解决办法
998
查看次数

创建 GORM 自定义数据类型,如何在扫描中获取上下文?

我正在尝试编写 Gorm 自定义数据类型:https : //gorm.io/docs/data_types.html

type MyDataType struct {}

func (f *MyDataType) Scan(value interface{}) error {
    //
}

func (f MyDataType) Value() (driver.Value, error) {
    //
}
Run Code Online (Sandbox Code Playgroud)

由于某些原因,我需要访问上下文Scan或能够检索字段标签。

有没有办法做到这一点 ?谢谢

go go-gorm

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

如何在 Golang 中为 Mongodb 使用 GORM?

我是go和 的新手MongoDB。我想在go-lang. 经过大量搜索,我仍然无法做到。

go mongodb go-gorm

4
推荐指数
1
解决办法
3894
查看次数

Java Spring 列表中的分页

我正在开发一个 Spring 项目,其中有任务(id,名称)和分配(task_id,名称,...)。当我收到任务时,我也会收到分配的任务,但我无法实现分页系统。

public List<Tasks> getAllTasks() {
       List<Tasks> task = (List<Tasks>) taskRepository.findAll();
       return task;
   }
Run Code Online (Sandbox Code Playgroud)

这是我当前的代码。我想在分页的每一侧显示 10 个项目。

我尝试过类似的事情:

   public Page<Tasks> getAllTasks(Long page, Long size){
       List<Tasks> tsk = (List<Tasks>) taskRepository.findAll();
     
       int start =  new PageRequest(page, size).getOffset();
       int end = (start + new PageRequest(page, size).getPageSize()) > tsk.size() ? tsk.size() : (start + new PageRequest(page, size).getPageSize());

       return new PageImpl<Tasks>(tsk.subList(start, end), new PageRequest(page, size), tsk.size());
   }
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

我当前的 JSON 响应如下:

{
   id: 1,
   name: First Task
   assignments: [ 
        {
          id: 1,
          assignment_name: firstassignment …
Run Code Online (Sandbox Code Playgroud)

java sorting spring pagination spring-data-jpa

4
推荐指数
1
解决办法
2687
查看次数

在Spring Boot应用程序中从自己的rest api调用另一个rest api

我正在学习 Spring Boot,我已经设法在我的计算机上部署一个 API,该 API 从 Oracle 获取数据,当我在浏览器中粘贴链接http://localhost:8080/myapi/ver1/table1data时,它会返回数据。下面是我的控制器代码:

@CrossOrigin(origins = "http://localhost:8080")
@RestController
@RequestMapping("/myapi/ver1")
public class Table1Controller {


    @Autowired
    private ITable1Repository table1Repository;

    @GetMapping("/table1data")
    public List<Table1Entity> getAllTable1Data() {
        return table1Repository.findAll();
    }
Run Code Online (Sandbox Code Playgroud)

现在这个场景运行良好。我想做另一件事。有一个 API https://services.odata.org/V3/Northwind/Northwind.svc/Customers返回一些客户数据。Spring Boot 是否提供了任何方法,以便我可以从自己的控制器重新托管/重新部署此 API,这样我应该点击http://localhost:8080/myapi/ver1而不是在浏览器中点击上面的链接/table1data它会返回给我相同的客户数据。

java api rest spring spring-boot

3
推荐指数
1
解决办法
2万
查看次数

使用 GORM golang 保留自定义设置数据类型

我在 go 中创建了一个自定义Set数据类型,我用它来定义一对多关系。例如,在我的架构中,我有以下结构定义

type Doctor struct {
  firstName string
  lastName string
  capabilities commons.Set
 }
Run Code Online (Sandbox Code Playgroud)

capabilities是一组具有以下值的字符串chat, audio, video,通过此设置,我尝试将上述结构保留到MySQL使用GORM库中,但是当我这样做时,出现以下错误

panic: invalid sql type Set (interface) for mysql

goroutine 6 [running]:
catalog/vendor/github.com/jinzhu/gorm.(*mysql).DataTypeOf(0xc00027e8a0, 0xc00024d680, 0x8, 0x8)
    /home/kumard/go/src/catalog/vendor/github.com/jinzhu/gorm/dialect_mysql.go:123 +0xce9
catalog/vendor/github.com/jinzhu/gorm.(*Scope).createTable(0xc000169400, 0xc14e60)
Run Code Online (Sandbox Code Playgroud)

我知道我必须实现某些方法才能实现此目的,但我无法弄清楚此处要实现哪个方法/回调。

ThreadUnsafeSet 定义:

type threadUnsafeSet map[interface{}]struct{}    

type OrderedPair struct {
    First interface{}
    Second interface{}
}    

func newThreadUnsafeSet() threadUnsafeSet {
    return make(threadUnsafeSet)
}    

func (pair *OrderedPair) Equal(other OrderedPair) bool {
    return pair.First == other.First && …
Run Code Online (Sandbox Code Playgroud)

go go-gorm

3
推荐指数
1
解决办法
5745
查看次数

如何让Spring Boot中的字段为空?

我正在尝试对电话号码进行验证,我们可以允许它为空。但每次输入时都必须是 10 个字符的大小。

这是我的代码

    @Size(max=10,min=10, message = "mobile no. should be of 10 digits")
    private String mobile;
Run Code Online (Sandbox Code Playgroud)

当我根本不传递任何值时,空值被接受,但是当我传递像这样的空字符串时。

"mobile":""
Run Code Online (Sandbox Code Playgroud)

它给我错误“手机号码应该是 10 位数字”。

java validation spring spring-mvc spring-boot

3
推荐指数
1
解决办法
4755
查看次数

PagingAndSortingRepository - 自定义可分页响应结构

有没有办法简化从这个控制器返回的结构:

@GetMapping
public Iterable<Task> getAll(@PathParam("page") int page) {
    Pageable pageable = PageRequest.of(page, 3);

    return taskRepository.findAll(pageable);
}
Run Code Online (Sandbox Code Playgroud)

现在响应的正文如下:

本地主机:8080/api/task?page=2

{
    "content": [
        ...
    ],
    "pageable": {
        "sort": {
            "sorted": false,
            "unsorted": true,
            "empty": true
        },
        "offset": 6,
        "pageSize": 3,
        "pageNumber": 2,
        "paged": true,
        "unpaged": false
    },
    "totalElements": 19,
    "last": false,
    "totalPages": 7,
    "number": 2,
    "size": 3,
    "sort": {
        "sorted": false,
        "unsorted": true,
        "empty": true
    },
    "numberOfElements": 3,
    "first": false,
    "empty": false
}
Run Code Online (Sandbox Code Playgroud)

有没有办法减少这些数据?如果我现在对排序不感兴趣并且只想返回这样的东西怎么办:

{
    "content": [
        ...
    ],
    "pageable": {
        "pageSize": …
Run Code Online (Sandbox Code Playgroud)

pagination controller response spring-data spring-boot

3
推荐指数
1
解决办法
725
查看次数

如何使用 Java 8 / Streams 在 HashMap 中找到具有某些条件的最大键?

假设我有以下数据:

在此处输入图片说明

题 :

  1. 我想找到最大 orderId 的 zscore,其中 Pair 为“AB”,OrderType 为“Buy”,状态为“InProgress”。

注意:我将此数据存储到 HashMap 中,名称为 orderBook,其中键为 orderId,值为 OrderModel(PairName、OrderType、Status、zscore)。

解决方案1:

    int maxOrderId = 0 ;
        getOrderBook().entrySet().stream()
                                .filter(e -> e.getValue().getPairName().equals("AB")
                                        && e.getValue().getCompletedStatus().equals("InProgress")
                                        && e.getValue().getOrderType().equals("Buy"))
                                .forEach(o -> {
                                    if (maxOrderId < o.getKey()) {
                                        maxOrderId = o.getKey();
                                    }
                                });
        
        double zscore = getOrderBook().get(maxOrderId).getzScore();
       System.out.println("Order ID :"+ maxOrderId +", Zscore :"+zscore);
Run Code Online (Sandbox Code Playgroud)

输出 : Order ID : 5, Zscore : -2.5

我可以使用上面的代码找到 zscore,但我想一次性找到。

那么如何在一行中使用 Java 8 / 流找到最大 OrderId 的 zscore?

有没有比我的代码更好的方法?

java performance java-8 java-stream

3
推荐指数
1
解决办法
351
查看次数

如何对多个实体使用单个 JPA 规范类和方法

我正在创建一个 Spring Boot 应用程序,其中包含产品、类别、机械、使用位置等实体。所有这些实体的共同点是它们都有一个名为 name 的 String 属性,并且可以使用 name 从 UI 中过滤。我已经编写了一个使用名称进行过滤的产品规范,并且它正在工作。下面是代码

public final class ProductSpecifications 
{

    public static Specification<Product> whereNameContains(String name)
    {
        Specification<Product> finalSpec = (Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder cb)
            -> cb.like(root.get(Product_.PRODUCT_NAME), "%"+name+"%");
        return finalSpec;
    }

    public static Specification<Product> whereNameEqauls(String name)
    {
        Specification<Product> finalSpec = (Root<Product> root, CriteriaQuery<?> query, CriteriaBuilder cb)
            -> cb.equal(root.get(Product_.PRODUCT_NAME), name);
        return finalSpec;
    }
}

Run Code Online (Sandbox Code Playgroud)

现在的问题是我必须再次编写相同的代码来过滤其他实体,唯一的区别是类名(Product)、字段名称(Product_NAME)和方法的返回类型。我可以创建一个通用类和方法吗?我可以将类名和字段名作为参数传递给它,并返回相应返回类型的规范。

java spring criteria-api spring-data-jpa spring-boot

2
推荐指数
1
解决办法
3138
查看次数