标签: java-8

使用 java 流从包含 List<String> 的 List<Object> 中检索 List<String>

我有这种情况:

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 java-8

0
推荐指数
1
解决办法
79
查看次数

为什么在java8中使用“default”关键字

在 Java 8default中引入了方法实现。我的问题是为什么需要default在方法名称/签名中有关键字。为什么不能default像通常的方法实现一样没有关键字?

java default interface java-8

0
推荐指数
1
解决办法
947
查看次数

缩短嵌套的 lambda

我想将任务列表映射到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)

如何缩短上述表达式以直接返回可调用对象?

java collections list java-8 java-stream

0
推荐指数
1
解决办法
78
查看次数

根据java中的内部对象列表值从对象列表中删除元素

如果某些内部列表属性值不满足条件,如何从列表中删除元素。这里的技巧是该属性本身是一个列表,比较基于该内部列表的某些属性。请参考以下示例并帮助填写代码中的注释部分:

目的 :

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)

java collections arraylist remove-if java-8

0
推荐指数
1
解决办法
540
查看次数

带有字符串列表的 Java 流 Collectors.groupingBy()

我有以下课程:

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),它会按指定的键

java java-8

0
推荐指数
1
解决办法
134
查看次数

为什么这个时间不能被DateTimeFormatter.ofPattern()解析?

当我运行以下命令时:

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 指示符,但据我所知,这应该有效。我究竟做错了什么?

java localtime java-8

0
推荐指数
1
解决办法
70
查看次数

java.lang.ClassNotFoundException: com.fasterxml.jackson.dataformat.xml.XmlMapper

正在使用 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 对象时,我收到此异常

我该如何解决?

resttemplate java-8 spring-boot jackson-databind

0
推荐指数
1
解决办法
3595
查看次数

不明确的方法调用

下面的代码块

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)

java java-8

0
推荐指数
1
解决办法
794
查看次数

将 Java-8 Stream 结果拆分为成功和失败列表

我有一个 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 和 …

java java-8 java-stream collectors

0
推荐指数
1
解决办法
446
查看次数

Java 8 将日期字符串转换为带时区的日期

我收到了格式为“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 date java-8

0
推荐指数
2
解决办法
1802
查看次数