标签: java-8

在java中使用Stream从forEach返回列表

我试图使用 Java1.8 使用 help Stream 函数将下面的 for 循环转换为 forEach 方法,但我很困惑,也很困惑这样做。

List<A> valueList = new ArrayList<>();
List<B> responseList = getResponses();
List<A> value = new ArrayList<>();

for (B getResponse: responseList) {
    valueList = getValues(getResponse);
    value.addAll(valueList);
}
Run Code Online (Sandbox Code Playgroud)

java foreach java-8 java-stream

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

JPA LazyInitializationException - 无法初始化代理

是的,我见过类似的问题,但没有一个答案真正引导我找到解决方案。我没有在任何地方使用该线程,并且相同的代码在另一个 jhipster 应用程序中工作,所以我很困惑为什么这个 lift+shift 会导致 Hibernate 问题。

public UserDetailsContextMapper userDetailsContextMapper() {
    return new UserDetailsContextMapper() {
        @Override
        public UserDetails mapUserFromContext(
            DirContextOperations ctx, String username,
            Collection<? extends GrantedAuthority> authorities) {
            log.error("2 " + username + " -> " + ctx.toString());
            String lowercaseLogonName = username.toLowerCase();
            Optional<User> userFromDatabase = userRepository.findOneByLogin(lowercaseLogonName);
            if (!userFromDatabase.isPresent()) {
                User ldapUser = new User();
                ldapUser.setLogin(lowercaseLogonName);
                ldapUser.setPassword(RandomStringUtils.random(60)); // We use LDAP password, but the password need to be set
                ldapUser.setActivated(true);
                try {
                    Attribute attribute = ctx.getAttributes().get("mail");
                    ldapUser.setEmail( attribute != null && …
Run Code Online (Sandbox Code Playgroud)

java database spring java-8 spring-data

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

为什么要重写接口方法?

当扩展抽象类时,我理解为什么你必须重写一些方法。但当涉及到接口时,我不明白为什么必须这样做。如果一个接口的所有方法都必须实现,那么重写它们有什么用呢?

我正在谈论@Override注释。

java overriding interface java-8

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

如何使用mockito为下面的异常处理方法编写单元测试?

@ExceptionHandler({ ConstraintViolationException.class })
public ResponseEntity<Object> handleConstraintViolation(ConstraintViolationException ex, WebRequest request) {
    StringBuilder messageBuilder = new StringBuilder("Validation failed for: ");
    ex.getConstraintViolations()
        .stream()
        .forEach(v -> messageBuilder
            .append("property: [" + v.getPropertyPath() + "], value: [" + v.getInvalidValue() + "], constraint: [" + v.getMessage() + "]"));
    return new ResponseEntity<>(responseBuilder
        .createErrorResponse(INVALID_PARAMETER,
            messageBuilder.toString()), getHeaders(), BAD_REQUEST);
}
Run Code Online (Sandbox Code Playgroud)

我想测试这个@ControllerAdvice方法

rest junit mockito java-8 spring-boot

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

当从匿名内部类或 lambda 访问时,为什么数组的值被视为最终或“有效最终”?

我正在阅读有关函数式接口(https://www.baeldung.com/java-8-function-interfaces)的内容,并且关于 a Supplier<T>,它是这样说的:

\n\n
\n

供应商的另一个用例是定义序列生成的逻辑。为了演示它,让\xe2\x80\x99s 使用静态 Stream.generate 方法来创建斐波那契数字流:

\n
\n\n
int[] fibs = {0, 1};\nStream<Integer> fibonacci = Stream.generate(() -> {\n    int result = fibs[1];\n    int fib3 = fibs[0] + fibs[1];\n    fibs[0] = fibs[1];\n    fibs[1] = fib3;\n    return result;\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

传递给 Stream.generate 方法的函数实现了Supplier 功能接口。请注意,要用作生成器,供应商通常需要某种外部状态。在这种情况下,其状态由最后两个斐波那契数列组成。

\n\n

为了实现这种状态,我们使用一个数组而不是几个变量,因为 lambda 内部使用的所有外部变量实际上都是 Final

\n
\n\n

我理解为什么变量在 lamdba 或匿名类中需要是最终的,我不明白的是为什么数组的值是“有效的最终”。

\n\n

我用下面的例子来说明这一点:

\n\n
final boolean run = true;\nexecutor.execute(() -> {\n    while (run) {\n        // do something\n    }\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

这里run …

java java-8

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

使用 Streams 将嵌套整数列表转换为二维数组 ( List&lt;List&lt;Integer&gt;&gt; -&gt; int[][] )

我搜索了类似的问题,但我只发现了不适用于这种情况的对象字符串:

想要转换List<List<Integer>> listint[][] array使用流

到目前为止我得到了这个:

int[][] array= list.stream().map(List::toArray)...
Run Code Online (Sandbox Code Playgroud)

我以我发现的其他类似问题为基础。但这些使用 String 并且不能使其适用于 Integers->int:

// Example with String 1:    
String[][] array = list.stream()
        .map(l -> l.stream().toArray(String[]::new))
        .toArray(String[][]::new);

// Example with String 2:    
    final List<List<String>> list = ...;
    final String[][] array = list.stream().map(List::toArray).toArray(String[][]::new);
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

如何使用 java 8 按“名称”对对象进行分组?

我有DTO一些属性,例如idnamedesc等。

它的所有属性都有 getter 和 setter。

我从服务中得到一个Page<MyDto>,我需要根据属性对 DTO 进行分组name

首先,我使用转换Page<MyDto>为。List<MyDto>page.getContent

我需要通过使用对其进行分组来将其转换ListMap<String, Object> (不是Map<String,String>namesJava8

我找到了一些例子,但它们没有解决我的问题。

如何将MyDto列表分组到地图中?

其中键是名称 ( String),值是Array<MyDto>每个名称的一个。

例如:

If `List<MyDto>` is : 
[
{"id":1, "name":"albert", "desc":"science"},
{"id":2, "name":"george", "desc":"econ"},
{"id":3, "name":"christ", "desc":"math"},
{"id":4, "name":"george", "desc":"literature"} // george repeats twice
]
Run Code Online (Sandbox Code Playgroud)

输出Map应该是:

{

"george":

[
{"id":2, "name":"george", "desc":"econ"},
{"id":4, "name":"george", …
Run Code Online (Sandbox Code Playgroud)

java hashmap stream java-8 java-stream

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

是否可以使用 Java 8 Streams 过滤器访问列表的索引?

是否可以使用 Streams 过滤器访问列表的索引?我的意思是...我知道可以使用循环(while、for 等)来做到这一点,但就好像列表在变成流时会丢失有关索引的信息。

我想是这样的:

list.stream().filter(x -> x > 100)
    .fiter(--getIndexOfEachValue--)
    .collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

如果我有 List=[10,200,30,150,400,30]...

我期望结果=[1,3,4]

java java-8 java-stream

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

无法使用 java 1.8 更新 docker 容器

在 docker 容器中运行的 java 应用程序之一需要 java 1.8 但容器具有 java 1.7 。现在它失败并出现错误“不支持的major.minor版本52.0”

\n\n

dockerfile内容是

\n\n
FROM\xc2\xa0tomcat:8.0 \n\xc2\xa0   \xc2\xa0   \nCOPY\xc2\xa0webapps/abc /usr/local/tomcat/webapps/abc\nCOPY\xc2\xa0webapps/*.war /usr/local/tomcat/webapps/   \n\xc2\xa0   \xc2\xa0   \n#COPY\xc2\xa0...........   \n\xc2\xa0   \xc2\xa0   \nCOPY\xc2\xa0tomcat-users.xml /usr/local/tomcat/conf/   \nCOPY\xc2\xa0server.xml /usr/local/tomcat/conf/  \n
Run Code Online (Sandbox Code Playgroud)\n\n

我尝试使用另一个基本映像“FROM tomcat:8.5.51-jdk8-openjdk”\n但 xdx 解析器出现错误。

\n\n

我如何在该容器上安装/升级到 java 版本 1.8。\n我是 DOTNET-Windows 人员。我们公司收购的实验室之一就有这个应用程序。原来的开发团队现在不可用。\n非常感谢这方面的任何帮助。

\n

java tomcat java-8 docker tomcat8

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

sudo ln -sfn 有什么作用?

我在我的 Mac 上为 Android Studio 安装了 JDK(我之前已经这样做过),并使用 Homebrew 进行安装。完成后我得到了这些建议?我想知道我是否希望系统 Java 包装器找到 JDK,我应该对其进行符号链接吗?以及为什么我会首先想要它?另外,我正在使用 .zshrc,因为它现在是默认的 Catalina,并且想知道我是否以相同的方式设置 $PATH 变量?

For the system Java wrappers to find this JDK, symlink it with
  sudo ln -sfn /usr/local/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk

openjdk is keg-only, which means it was not symlinked into /usr/local,
because it shadows the macOS `java` wrapper.

If you need to have openjdk first in your PATH run:
  echo 'export PATH="/usr/local/opt/openjdk/bin:$PATH"' >> ~/.zshrc

For compilers to find openjdk you may need to set:
  export CPPFLAGS="-I/usr/local/opt/openjdk/include"```
Run Code Online (Sandbox Code Playgroud)

java homebrew zshrc java-8 android-studio

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