我从 Wix 收到一个数组,其中包含用户通过表单选择的课程。
从 Wix 接收的数组示例,其中用户选择了 2 门课程。这个数组被放置在一个单元格中。
["VBA","Django"]
Run Code Online (Sandbox Code Playgroud)
上面的数组放置在我的 excel 文件中的一个单元格中,我从这里将单元格变为红色并用课程填充 VBA 数组:
Dim data() As Variant
Dim arrStr As String
Dim dataItems As Long
Dim i As Long
Dim IndividualCourses(1 To 9) As String
arrStr = Range("T3")
arrStr = Replace(Replace(arrStr, "[", "{"), "]", "}")
data = Application.Evaluate(arrStr)
dataItems = Application.CountA(data)
For i = 1 To dataItems
IndividualCourses(i) = data(i)
Next i
Run Code Online (Sandbox Code Playgroud)
但用户可以选择 1 到 10 门课程。所有课程的数组:
["JS","Python","VBA","Java","Spring","C++","C#",".NET","Django","CSS"]
我想根据从 Wix 收到的数组,将 1 放在数组中存在的课程的单元格中,将 0 放在其他课程中。
例如,这个课程选择了["VBA","Django"],它应该在VBA单元格中放置1,在Django单元格中放置1,在剩余课程单元格中放置0,因为我想看看用户选择了哪些课程.
这个复杂的问题有什么想法吗?!?
方法的完整签名:
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
Run Code Online (Sandbox Code Playgroud)
我正在学习 lambda 表达式,我有这段代码比较员工列表并按姓名字段对它们进行排序:
List<Employee> employees = new ArrayList<>();
Collections.sort(employees, Comparator.comparing(Employee::getName));
Run Code Online (Sandbox Code Playgroud)
该代码工作正常,但我查看了文档中的 Comparator 功能接口,并且找到了方法“比较()”的签名。
comparing(Function<? super T,? extends U> keyExtractor)
Run Code Online (Sandbox Code Playgroud)
我没有得到比较()的参数。我怎么知道参数接受 lambda 表达式?以及如何解释约束:<? 超级T,?扩展 U> keyExtractor?
我知道 super 是什么意思?在层次继承中必须是类型 T 或以上,并且 ? 在层次继承中也必须是 U 类型及以下类型。但是我们怎么能在我的例子中转述呢?
可以这样解释: ? 继承链中必须是Employees及以上类型,并且继承链中name字段必须是Employees或以下类型?或者 ?必须是类型 Array List 及以上和 ? 必须是类型员工列表及以下?
我有一个类 CBound,它实现了两个接口 IBound1 和 Ibound2:
class CBound implements IBound1, IBound2 {}
Run Code Online (Sandbox Code Playgroud)
我有一个通用方法,它接受一个实现 IBound1 和 Ibound2 接口的类类型作为类型参数:
public static <T extends IBound1 & IBound2> void getData(T list) {
//Some code...
}
Run Code Online (Sandbox Code Playgroud)
我用 CBound 类的实现创建了一个 IBound1 类型的对象:
IBound1 a = new CBound();
getData(a); // doesn't work
Run Code Online (Sandbox Code Playgroud)
为什么 obj a 不能作为 getData() 的参数?
当我更改代码时:
CBound b = new CBound();
getData(b); // It works fine
Run Code Online (Sandbox Code Playgroud) 我在服务中有一个方法可以从数据库中检索课程对象。在将其发送到控制器之前,我需要解压缩字段 byte[] 徽标。Logo 是一张图片,需要在渲染到前端之前从数据库中解压出来。我试图用流来做到这一点,但没有任何成功。map() 方法在 forEach() 方法之后不起作用。
public List<CourseDto> getCoureses() {
List<Courses> courses = courseRepositoryDao.findAllByIsCourseFreeAndIsCourseActive(true, true);
List<CourseDto> coursesNameDto = courses
.stream()
.forEach(course-> course.setLogo(decompressZLib(course.getLogo()))
.map(course -> modelMapper.map(CourseMapper.toUserDtoFreeCourses(course), CourseDto.class))
.collect(Collectors.toList());
return coursesNameDto;
}
Run Code Online (Sandbox Code Playgroud) java lambda functional-programming java-stream functional-interface
java ×3
generics ×2
lambda ×2
excel ×1
java-8 ×1
java-stream ×1
office365 ×1
type-bounds ×1
vba ×1