标签: java-8

为什么我们必须将Collectors.toList()返回的List转换为List <Integer>,即使Stream的元素已经映射到Integer?

我正在将原始映射Stream到a Stream<Integer>,然后将元素收集到a List<Integer>.

为什么我必须将结果投射collect(Collectors.toList())List<Integer>我的映射器.map(str -> ((String)str).length())- 已映射到Integer

我的代码:

List list = Arrays.asList("test", "test2");
List<Integer> lengths = (List<Integer>) list.stream()
                                            .map(str -> ((String)str).length())
                                            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

如果我不使用raw List,则无需强制转换:

List<String> list = Arrays.asList("test", "test2");
List<Integer> lengths = list.stream()
                            .map(str -> str.length())
                            .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

如何使用typescript中的属性对对象数组进行分组?

我想在typescript中对对象数组进行分组.我以传统或命令的方式做到如下:

     public datas: Data[];
     public dtoMap: Map<String, DataDTO[]> = new Map<String, DataDTO[]>();


 private groupBy(): void {
            for (let item of this.datas) {            
                let valueList: DataDTO[] = this.dtoMap.get(item.type);
                if (isUndefined(valueList) || valueList === null) {
                    valueList = new Array<DataDTO>();
                }
                valueList.push(convertToDTO(item));
                this.dtoMap.set(item.type, valueList);
            }
}
Run Code Online (Sandbox Code Playgroud)

但在Java中,我写了类似的方法如下:

public Map<String, List<DataDTO>> getDataMap(String defId, List<Data> datas) {
 return datas.stream().map(item -> convertToDTO(defId, item)).collect(Collectors.groupingBy(DataDTO::getType, Collectors.toList()));
}
Run Code Online (Sandbox Code Playgroud)

你能帮助改进打字稿方法吗?使用TypeScript中的属性对对象数组进行分组的最佳方法是什么?谢谢

java java-8 typescript angular

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

java - 读取由unicode字符终止的文件

我有一个特殊的文件,其中的行被终止 '\001'.

我想逐行阅读这个文件.我一直在用Files.lines(path).但现在这个失败了,因为这些行没有被换行符终止.

什么是最好的方法?

java file-io java-8

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

Java 8 Stream每个索引运行1个函数,而每n次运行另一个函数

什么是迭代Java 8 Stream的最佳方式,这样我可以为每个元素(forEach)执行一个函数,而为每10个元素执行另一个函数.使用foreach的每个元素都显示在下面.我可以使用什么功能来拦截eveyr nth元素并执行第二个函数调用?

示例代码如下: -

Stream<String> strings = Files.lines(path); //some stream

stream.forEach(s -> System::println)// every element but how can i perform 
Run Code Online (Sandbox Code Playgroud)

functional-programming java-8 java-stream

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

使用JDK8以单行修改列表数据

在Java中我们可以修改List如下

for (Customer cust : customers) {
    cust.setAge(15);
    cust.setName("Customer1");
    cust.setAddress("Address1");
}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,可以用一个循环修改多个属性.

在JDK8中,可以用以下内容更新列表数据forEach:

customers.forEach(cust -> cust.setAge(15));
Run Code Online (Sandbox Code Playgroud)

但是我想用java 8修改多个属性.怎么做呢?

java foreach java-8

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

Mockito拒绝将TypeSafeMatcher与通用方法API配对

我想测试调用某些API的代码:

public <T extends MessageLite> ApiFuture<String> publish(final T message) throws Exception {
}


public <T extends MessageLite> ApiFuture<String> publish(final T message, final ApiFutureCallback<T> futureCallback) throws Exception {
}


public <T> String publishSynchronous(final String message, final ApiFutureCallback<T> futureCallback) throws Exception {
}
Run Code Online (Sandbox Code Playgroud)

在我的测试中,我使用了嘲笑模拟,然后我想验证它是否被具有字段的原型对象(扩展了MessageLite)调用 isSuccess = false

我已经厌倦了这段代码:

    verify(customPublisher, times(0)).publish(isFailureResult(), anyObject());
Run Code Online (Sandbox Code Playgroud)

和这个匹配器:

public class FailResultMatcher extends TypeSafeMatcher<MessageLite> {

    @Override
    protected boolean matchesSafely(final MessageLite sentResult) {
        return !((SdkResult)sentResult).getIsSuccess();
    }


    public static FailResultMatcher isFailureResult() {
        return new FailResultMatcher();
    }

    @Override
    public void describeTo(final Description …
Run Code Online (Sandbox Code Playgroud)

java unit-testing mocking mockito java-8

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

如何在Java 8流过滤器中基于子文档过滤Mongo文档

我试图过滤子文档.

样本记录:

[Document{{_id=597608aba213742554f537a6, upp_id=, content_id=597608aba213742554f537a3, idmapping=Document{{ptype=PDF, clientid=12345, normalizedclientid=12345, systeminstanceid=, sourceschemaname=, platforminternalid=0987654321}}, batchid=null, locale=en_US}}]
Run Code Online (Sandbox Code Playgroud)

我需要使用idmapping.ptype = PDF进行过滤

MongoCursor<Document> cursor = mailboxitemCollection.find(whereClause).iterator();
List<Document> documentList = new ArrayList<Document>();

while (cursor.hasNext()) {
  Document object = cursor.next();
  documentList.add(object);
}

 List<Document> outList = documentList.stream()
        .filter(p -> p.getInteger(CommonConstants.VISIBILITY) == 1
            && (!StringUtils.isEmpty(req.ptype())? (p.getString("idmapping.ptype").equalsIgnoreCase(req.ptype())) : true)
            ).parallel().sequential().collect(Collectors.toCollection(ArrayList::new));

System.out.println(outList);
System.out.println(outList.size());
Run Code Online (Sandbox Code Playgroud)

我得到Null Point异常,无法从List documentList中读取sub/embed文档.

先感谢您!Bharathi

java stream mongodb java-8 java-stream

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

理解Java 8/9函数式编程中的Map和Reduce(lambda表达式).map()和reduce()如何提高性能?

这一行功能编程代码可以: 2*3 + 4*3 + 6*3 + 8*3 + 10*3操作.

 int sum = IntStream.rangeClosed(1,10) /* closed range */
            .filter(x -> x%2 == 0) /* filter to even numbers in range */
            .map(x -> x*3) /* map */
            .sum(); /* actual sum operation happens */
            System.out.println(sum); /* prints 90 */
Run Code Online (Sandbox Code Playgroud)

我明白它在做什么.我想知道在内存分配方面发生了什么?我们可以使用与上述操作相似的旧替代方案.这很容易理解,但基于Lambda的代码更具表现力.

int sum=0;
for(int i=1; i<=10;i++) {
   if(i%2 == 0) {
      sum=sum+i*3; 
      }
    }
System.out.println(sum); /* prints 90 */
Run Code Online (Sandbox Code Playgroud)

java lambda functional-programming java-8

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

如何使用Java 8流将字符串转换为boolean []数组?

*字符转换为真实的,一切为false.

这个答案显示了如何转换为Boolean [],但我试图转换为标量布尔数组.

java8 lambda:将0和1的String转换为基本的布尔数组

java functional-programming java-8

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

返回两个选项的总和,如果至少有一个不存在,则返回null

我如何使用Java Optional API以更优雅的方式重写以下代码:

first == null || second == null ? null : first + second;
Run Code Online (Sandbox Code Playgroud)

null如果两个变量中的任何一个是null或其他地方的总和,则代码应该返回.

java optional java-8

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