java 8中的两个列表对象的交集.有人能告诉我我做错了什么吗?
List<Student> originalStudent = new ArrayList<>();
List<Student> newStudent = new ArrayList<>();
List<Student> intersectListStudent = new LinkedList<>()
originalStudent.add(new Student("William", "Tyndale",1));
originalStudent.add(new Student("Jonathan", "Edwards",2));
originalStudent.add(new Student("Martin", "Luther"),3);
newStudent.add(new Student("Jonathan", "Edwards",2));
newStudent.add(new Student("James", "Tyndale",4));
newStudent.add(new Student("Roger", "Moore",5));
originalStudent.forEach(n ->
newStudent.stream()
.filter(db -> !n.getName().equals(db.getName()) &&
!n.getLastName().equals(db.getLastName()))
.forEach(student-> intersectListStudent .add(student)));
Run Code Online (Sandbox Code Playgroud) 我有平面对象POJO:
class FamilyInformation {
String house;
String familyMember;
}
Run Code Online (Sandbox Code Playgroud)
使用这样的数据:
[{
house: "houseName1",
familyMember: "Son"
},
{
house: "houseName1",
familyMember: "Mom"
},
{
house: "houseName1",
familyMember: "Dad"
}]
Run Code Online (Sandbox Code Playgroud)
我想将其转换为分层对象POJO:
class House {
String houseName;
List<FamilyMember> familyMembers;
}
class FamilyMember {
String familyMember;
}
Run Code Online (Sandbox Code Playgroud)
我发现的每一条信息都是将其转换为地图.但是我想要List<House>包含List<FamilyMember>任何想法我该怎么办?
使用Stream.reduce反演求和不正确,这里出了什么问题?
double[] array = {1.0, 2.0};
double iunversionSum = Arrays.stream(array).reduce(0.0, (a, b) -> Double.sum(1.0 / a, 1.0 / b));
Run Code Online (Sandbox Code Playgroud)
输出为.5,但预计为1.5(1/1 + 1/2)
我想尝试像这样排序我的对象列表:
List<UsersDataFoundTo> mergedUsers = mergeUsersFound(ldapUsers, foundUsers);
return mergedUsers.sort((UsersDataFoundTo h1, UsersDataFoundTo h2) -> h1.getLastName().compareTo(h2.getLastName()));
Run Code Online (Sandbox Code Playgroud)
在return语句中我收到一个错误:
Incompatible types.
Required: java.util.List<UsersDataFoundTo>
Found:void
Run Code Online (Sandbox Code Playgroud)
那我该怎么办?
我有一个GroupOffices列表
List<GroupOffice> officesOfTheGroup;
Run Code Online (Sandbox Code Playgroud)
我想搜索id是否等于groupOffice.getId(长值),但标签为groupOffice.getLabel(字符串),并将其分配给布尔值。下面的代码运行良好,但是有没有比使用for循环遍历所有项目更好的方法了?
public GroupOfficeDto saveGroupOffice(GroupOfficeDto groupOfficeDto) {
List<GroupOffice> officesOfTheGroup = //some list from db..
for (GroupOffice go : officesOfTheGroup) {
if ((!go.getId().equals(groupOfficeDto.getId())) && go.getLabel().equals(groupOfficeDto.getLabel())) {
return groupOfficeDto;
}
return null:
}
Run Code Online (Sandbox Code Playgroud)
或者如何使用流?如果是这样,使用流是更好的方法吗?
注意:我正在使用Java8
我正在使用java 8.我试图用DateTimeFormatter解析日期到字符串.但它给出了以下错误.我的尝试和错误如下.谁能帮帮我吗?
我的代码>>
String getFormatedDateForList(String dateObj) {
// dateObj = "2019-02-06 00:00:00.0"
DateTimeFormatter inputFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
DateTimeFormatter outputFormat = DateTimeFormatter.ofPattern("dd/MM/yyyy");
String output = LocalDate.parse(dateObj, inputFormat).format(outputFormat)
return output
}
Run Code Online (Sandbox Code Playgroud)
错误>>
Text '2019-02-06 00:00:00.0' could not be parsed, unparsed text found at index 19. Stacktrace follows:
Message: Text '2019-02-06 00:00:00.0' could not be parsed, unparsed text found at index 19
我知道使用"+"连接运算符来构建字符串是非常低效的,这就是为什么建议使用StringBuilder类,但我想知道这种模式是否也是低效的?
String some = a + "\t" + b + "\t" + c + "\t" + d + "\t" + e;
Run Code Online (Sandbox Code Playgroud)
我猜这里的编译器会优化编程,不是吗?
我有一个项目列表(MyDetail对象),我想用流排序方法排序.该对象有3个字段:field1,field2,field3.我想先按field3然后按field2然后按field1排序,所有都按相反顺序排序.所以我写了一个方法sortMyList.
我有一个未排序的项目列表unSortedDetails如下:myDetail1:"20180201",false,false myDetail2:"20180101",false,false myDetail3:"20180101",false,true
在sortMyList(unSortedDetails)之后,我希望我的结果是myDetail3,myDetail1,myDetail2,但实际结果是myDetail1,myDetail3,myDetail2,为什么?
所以,如果我像下面这样实现Comparable for MyDetail,那么它按预期工作.这太奇怪了.我无法弄清楚为什么.谢谢你的帮助!
public List<MyDetail> sortMyList(List<MyDetail> unSortedDetails){
List<MyDetail> myDetails = unSortedDetails
.stream().sorted(Comparator.comparing(MyDetail::getField11).reversed()
.thenComparing(MyDetail::getField2).reversed()
.thenComparing(MyDetail::getField3).reversed())
.collect(Collectors.toList());
return myDetails;
}
@Setter
@Getter
public class MyDetail{
String field1;
Boolean field2;
Boolean field3;
}
@Setter
@Getter
public class MyDetail implement Comparable<MyDetail>{
String field1;
Boolean field2;
Boolean field3;
@Override
public int compareTo(MyDetail o) {
if (this == o || this.equals(o)) return 0;
if (field3) return -1;
if (o.field3) return 1;
if (!field3 && !o.field3 && field2) return -1;
if(!field3 && …Run Code Online (Sandbox Code Playgroud) 我试图异步调用一个方法.但不知怎的,它不起作用.有人可以帮我解决这个问题吗?
我的主要切入点:
@SpringBootApplication
@EnableAsync
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
AsyncService asyncService = new AsyncService();
asyncService.asyncMethod();
asyncService.asyncMethod();
}
}
Run Code Online (Sandbox Code Playgroud)
异步服务:
@Component
public class AsyncService {
@Async
public void asyncMethod(){
log.info("starting...");
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("ending...");
}
}
Run Code Online (Sandbox Code Playgroud)
最后,在日志中我期待:
但这就是我得到的:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | …Run Code Online (Sandbox Code Playgroud) 我在尝试打印JAVA8收藏家的结果时遇到Ambiguity错误.
我试图打印Product对象中的ID总和的结果,但得到以下错误:
"方法println(double)对于PrintStream类型是不明确的"
这是一小段代码,我收到编译错误:
编辑:添加代码段以获取更多详细信息:
package com.sample.reproduce.bugs;
public class Product {
private double id;
private String productName;
public double getId() {
return id;
}
public void setId(double id) {
this.id = id;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我遇到编译错误的代码行:
System.out.println(productList.stream().collect(Collectors.summingDouble(x -> x.getId())));
Run Code Online (Sandbox Code Playgroud)
班级快照:
如果我将在一个单独的行中使用Collector(println方法之外),我不会收到任何错误.
如果我们在println()方法中使用它,为什么编译器无法检测到JAVA 8收集器的确切返回类型?
使用命令提示符添加另一种方法的细节:
我尝试使用相同JDK版本的命令提示符,并且程序已成功编译和执行.所以Holger的答案似乎是正确的.这似乎仅适用于Eclipse编译器:
java ×10
java-8 ×10
java-stream ×6
sorting ×2
arraylist ×1
collectors ×1
ecj ×1
intersect ×1
list ×1
reduce ×1
spring ×1
spring-boot ×1
stream ×1
string ×1