我有这种情况:
Class Employee{
//some attributes
List<String> idContract
//getter, setter
}
Run Code Online (Sandbox Code Playgroud)
我需要使用 java 8 流从列表中检索列表 idContracts。
我正在尝试这样的事情:
lst.stream().filter(o->!o.getLstDipFuoriSoglia().isEmpty())
.map(ResultOdg::getLstDipFuoriSoglia)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
但是,当然,返回一个 List< List < String >>,那么我怎样才能实现这个目标呢?
谢谢你的回答
在 Java 8default中引入了方法实现。我的问题是为什么需要default在方法名称/签名中有关键字。为什么不能default像通常的方法实现一样没有关键字?
我想将任务列表映射到List<Callable<Tasks>>:
List<Callable<Tasks>> callableTasks = tasks.stream().map(t ->
{
// how to return callable directly and omitting curly braces?
Callable<Task> task = () -> run(t);
return task;
}).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
如何缩短上述表达式以直接返回可调用对象?
如果某些内部列表属性值不满足条件,如何从列表中删除元素。这里的技巧是该属性本身是一个列表,比较基于该内部列表的某些属性。请参考以下示例并帮助填写代码中的注释部分:
目的 :
Class product{
private String productId;
private String productName;
private List<Attribute> attributeList;
public static class Attribute{
private Long attributeId;
}
}
Run Code Online (Sandbox Code Playgroud)
驱动程序类:
Class Driver{
List<product> productList = new ArrayList<product>();
/*
Remove the object from productList if attributeList doesn't contain attribute with attributeId = x;
*/
}
Run Code Online (Sandbox Code Playgroud) 我有以下课程:
Class Foo{
private String cassette;
private List<String> organs; //["Lung","Liver"]
//getter setter
}
Run Code Online (Sandbox Code Playgroud)
我正在收集数据List<Foo>,我想按器官将它们分组为Map<String,List<Foo>>
到目前为止,我已经尝试了以下解决方案:
Map<Object, List<Foo>> collect = fooList
.stream()
.collect(Collectors.groupingBy(x -> x.getOrgan()));
Run Code Online (Sandbox Code Playgroud)
它返回Map<Object, List<Foo>>而不是Map<String,List<Foo>>如下:
{[肺,肝]=[Foo [盒=1A,器官=[肺,肝脏]]],[肝脏]=[Foo [盒=2A,器官=[肝脏]]]}
另外,我怎样才能使一个通用的方法,该方法将返回Map<String,List<Foo>>时,我只传递密钥的分组Type<T>进行Collectors.groupingBy(T),它会按指定的键
当我运行以下命令时:
String s2 = "07:05:45PM";
LocalTime time = LocalTime.parse(s2, DateTimeFormatter.ofPattern("HH:mm:ssa"));
Run Code Online (Sandbox Code Playgroud)
我得到:
Exception in thread "main" java.time.format.DateTimeParseException:
Text '07:05:45PM' could not be parsed at index 8
Run Code Online (Sandbox Code Playgroud)
它似乎不喜欢 AM/PM 指示符,但据我所知,这应该有效。我究竟做错了什么?
正在使用 Spring boot 2.1.1 在使用 org.springframework.web.client.RestTemplate 时出现以下错误
java.lang.ClassNotFoundException: com.fasterxml.jackson.dataformat.xml.XmlMapper
at java.net.URLClassLoader.findClass(Unknown Source) ~[na:1.8.0_191]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_191]
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) ~[na:1.8.0_191]
at java.lang.ClassLoader.loadClass(Unknown Source) ~[na:1.8.0_191]
at
org.springframework.http.converter.json
.Jackson2ObjectMapperBuilder.build(Jackson2ObjectMapperBuilder.java:617) ~[spring-web-
5.1.3.RELEASE.jar:5.1.3.RELEASE]
at org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter.<init>
(MappingJackson2XmlHttpMessageConverter.java:50) ~[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at
Run Code Online (Sandbox Code Playgroud)
从我的pom:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在创建 org.springframework.web.client.RestTemplate 对象时,我收到此异常
我该如何解决?
下面的代码块
package com.example;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test {
private static final Logger LOGGER = LogManager.getLogger(Test.class);
public static void main(String[] args) {
try {
log("1234", "main", "try");
} catch (Exception e) {
log("main", "Error in main",e);
}
}
static void log(String methodName, Object message, Throwable t) {
LOGGER.error("[Method Name :" + methodName + "] [Message :" + message + "]", t);
}
static void log(String requestId, String method, Object message) {
LOGGER.error("[RequestId :" + requestId + "]" + …Run Code Online (Sandbox Code Playgroud) 我有一个 Foo 列表,在每个 Foo 上,我应用了一个处理器方法来获取ValidItem.
如果处理中出现错误,那么我返回ErrorItem.
现在如何通过 Java 8 流处理它以得到 2 个不同列表形式的结果
List<Foo> FooList = someList....;
class ValidItem extend Item{......}
class ErrorItem extend Item{......}
Item processItem(Foo foo){
return either an object of ValidItem or ErrorItem;
}
Run Code Online (Sandbox Code Playgroud)
我相信我能做到
Map<Class,List<Item>> itemsMap =
FooList
.stream()
.map(processItem)
.collect(Collectors.groupingBy(Object::getClass));
Run Code Online (Sandbox Code Playgroud)
但作为List<Parent>不是一个List<Child>让我无法强制转换地图结果变成List<ValidItem>
现实ErrorItem,并ValidItem在所有,没有关系只是为这种蒸汽处理和processItem方法我着想两个完全不同的类让他们在同一层次通过扩展标记项目班级,。
在代码中的许多其他地方,我不能/不应该将 ValidItem 称为 Item ,因为它给出了它也可以是 ErroItem 的想法。
是否有使用流的正确方法,最后我得到 2 个列表。和 ErrorItem 和 ValidItem 没有扩展相同的 Item 类?
############## 更新##############
正如我所说的 ValidItem 和 …
我收到了格式为“yyyy-MM-dd'T'HH:mm:ssXXX”的字符串
例如“2020-06-01T11:04:02+02:00”
我想把它转换成“yyyy-MM-dd'T'HH:mm:ss:SSSZ”
例如“2020-06-01T11:04:02.000+0200”
我实际上不知道时区。它应该取自字符串的最后一部分。
我已经尝试过,但是当我将字符串转换为日期(即 IST)时,它占用了我的本地时间和时区。
SimpleDateFormat sd1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
//sd1.setTimeZone(TimeZone.getTimeZone("PST"));
Date dt = sd1.parse("2020-06-01T11:04:02+02:00");
SimpleDateFormat sd2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSSZ");
System.out.println(sd2.format(dt));
Run Code Online (Sandbox Code Playgroud)
输出:
2020-06-01T14:34:02:000+0530
Run Code Online (Sandbox Code Playgroud)
只有日期是正确的,时间和时区已更改。
我知道我做错了,如果有人能告诉我我该怎么做,这将非常有帮助。谢谢您的帮助。
java-8 ×10
java ×9
collections ×2
java-stream ×2
arraylist ×1
collectors ×1
date ×1
default ×1
interface ×1
list ×1
localtime ×1
remove-if ×1
resttemplate ×1
spring-boot ×1