我有一个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 流平面地图可能是一种方式。所以关键不仅是重新映射这个,而且是用最高效的方式来做到这一点。
我正在尝试编写 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和 的新手MongoDB。我想在go-lang. 经过大量搜索,我仍然无法做到。
我正在开发一个 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) 我正在学习 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它会返回给我相同的客户数据。
我在 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) 我正在尝试对电话号码进行验证,我们可以允许它为空。但每次输入时都必须是 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 位数字”。
有没有办法简化从这个控制器返回的结构:
@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) 假设我有以下数据:
题 :
注意:我将此数据存储到 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?
有没有比我的代码更好的方法?
我正在创建一个 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 ×6
spring ×4
spring-boot ×4
go ×3
go-gorm ×3
java-8 ×2
java-stream ×2
pagination ×2
api ×1
collectors ×1
controller ×1
criteria-api ×1
groupingby ×1
mongodb ×1
performance ×1
response ×1
rest ×1
sorting ×1
spring-data ×1
spring-mvc ×1
validation ×1