标签: java-stream

具有Lambda表达式的本地类

在我测试时,下面的代码执行没有任何问题.但我无法理解逻辑.有人可以解释一下吗?

public static void main(String[] args) {
    List<String> london = new ArrayList<>(Arrays.asList("Chinatown","Croydon","Eden Park"));
    class City{
        private String name;
        City(String name){
            this.name = name;
        }

        public void printCity(){
            System.out.println(name);
        }
    }

    london.stream().map(City::new).forEach(City::printCity); //Chinatown,Croydon,Eden Park
}
Run Code Online (Sandbox Code Playgroud)

在上面的示例代码中,我有以下问题.

  1. foreach方法始终采用消费者对象.在这里,printCity方法不是一个接受参数的方法.它仍然有效.怎么样?
  2. printCity方法在这里不是静态方法.城市本身如何调用实例方法?

java lambda local-class java-stream method-reference

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

java 8中有"instanceof"的替换吗?

如何更改下面的代码在java 8中使用流来检查类型对象并进行转换?java 8还有其他选择吗?

private void fillObject(Object role, String issuingRange) {

        if (role != null) {
            List<String> rangeList2 = null;
            if (role instanceof ArrayList<?>) {
                rangeList2 = (ArrayList<String>) role ;
            } else if (role instanceof String) {
                rangeList2 = new ArrayList(Arrays.asList(role ));
            }
}
Run Code Online (Sandbox Code Playgroud)

java oop java-8 java-stream

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

如何清理Java Streams?

我有这个流,以及其他一些人,我滥用了一堆电话来完成工作.当利用J8时,似乎是一种反模式.

+    Arrays.stream(resources)
+        .map(this::ingestFromFile)
+        .collect(Collectors.toList())
+        .stream()
+        .map(Container.class::cast)
+        .map(Container::getAll)
+        .flatMap(Collection::stream)
+        .collect(Collectors.toList())
+        .forEach(
+            dataType -> {
+              loaderConstants.getRepo(dataType.toString()).save(dataType);
+              LOGGER.log(Level.INFO, "Saved: " + dataType);
+            });
Run Code Online (Sandbox Code Playgroud)

我怎样才能缩短这一点,将来我应该注意哪些陷阱以避免这种类型的开发?

java design-patterns java-stream

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

如何使用Steam API Java 8将Map List &lt;Map &lt;String,Object &gt;&gt;的列表转换为Map Map &lt;String,List &lt;String &gt;&gt;的值列表

我有一张地图清单。该映射包含字符串作为键和对象作为值。最可能的值也为字符串。我想按一个值分组,以便将一组值作为键,将另一组唯一值作为列表。实际上,地图列表是沙发基准选择数据。

例如:

 [{"id":"1", "status":"pending"},{"id":"2", "status":"download"},{"id":"3", "status":"pending"},{"id":"4", "status":"pending"}, {"id":"5", "status":"ready"},{"id":"6", "status":"download"}] => {"pending":["1","3","4"], "download":["2","6"], "ready":["5"]}
Run Code Online (Sandbox Code Playgroud)

java-8 java-stream

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

在流中打开流

我有这段代码.我该如何改造它?功能风格?事实上,我有List<X>.每个X包含List<V>.此列表中的每个V都有List<M>一个参数.我需要构建Map<X,Y>,其中Y是存储在对象X中聚合的所有V对象中的所有M个对象的数量.

HashMap<Country, Integer> modelsPerCountryMap = new HashMap<>();
int count;
for (Country country : CountryDataSingleton.getCountryDataCollection()) {
    count = 0;
    for (CarMaker cm : country.getListOfMakers()) {
        count += cm.getModels().size();
    }
    modelsPerCountryMap.put(country, count);
}
Run Code Online (Sandbox Code Playgroud)

java functional-programming java-8 java-stream

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

如何按长度映射字符串流

我得到了一串字符串,并希望按长度映射它们

 Stream<String> s = Stream.of("aaaa", "a", "aaa", "a", "aaaa", "aa", "aaaaaa", "aa");
 Map<Integer, Set<String> result = null;
 int i = 0;
 result.put(i, s.filter(x -> (x.length() == i));
Run Code Online (Sandbox Code Playgroud)

显然,这不会以这种方式工作,因为我不能多次打开流,并且我无法访问longes String以获得良好的循环.但是我怎么能做到呢?

java java-stream

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

流计数与toList大小

哪个更快?

myCollection.stream().filter(somePredicate).count();
Run Code Online (Sandbox Code Playgroud)

VS

myCollection.stream().filter(somePredicate).collect(Collectors.toList()).size();
Run Code Online (Sandbox Code Playgroud)

显然,第二个似乎更慢.但是想知道内部是否有任何优化?

java java-stream

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

使用lamda表达式java比较两个映射

我需要比较地图A,地图B中存在的关键字.如果关键字存在于两个地图(A和B)中,则添加该特定关键字和值需要使用lamda表达式添加到新地图c中.请在下面找到我的示例代码:

mapA.forEach((key, value) -> mapC.put(mapB.get(Key), value)));
Run Code Online (Sandbox Code Playgroud)

上面的代码当前不会在添加到mapC之前检查mapA中是否存在key,mapB.

lambda java-8 java-stream

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

将Collection <String []>的流转换为List <String> []

我有一段代码:

table.stream().filter(row -> !hash.containsKey(row[keyColumnNumber]))
.map(row -> row[keyColumnNumber]).map(hash::get)
Run Code Online (Sandbox Code Playgroud)

最后一步:.map(hash::get)退货Collection<String[]>.因此我需要将所有这些收集到List.

.collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

返回List>期望的内容,但是

.flatMap(Stream::of).collect(Collectors.toList()).collect(Collectors.toList())
Run Code Online (Sandbox Code Playgroud)

返回相同的结果.

java java-8 java-stream

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

在对象列表中查找元素的最大大小

@Data
class Person {

    private String fname;
    private String lname;

    private List<String> friends;
    private List<BigDecimal> ratings;

    ...
}

@Data
class People {

    private List<Person> people;

    ...
}
Run Code Online (Sandbox Code Playgroud)

假设我有上述课程,并且需要弄清楚任何一个人拥有的朋友数量是多少.我知道前流的方式...通过循环遍历列表中的每个元素并检查friends.size()是否大于当前存储的最长列表的数量.有没有办法简化流的代码?像这样的回答?

java java-stream

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