小编Tag*_*eev的帖子

流分组:子列表到唯一的父列表

我正在寻找一种简洁有效的方法来从使用Java 8流的子项列表中获取唯一父项列表.

对于示例,我有两个简单的类:

public class Child{
  private Parent parent;
  public Child(Parent parent){
    this.parent = parent;
  }
  public Parent getParent(){
    return this.parent;
  }
}

public class Parent{
  private List<Child> children;
  public Parent(){
    this.children = new ArrayList<Child>();
  }
  public void addChild(Child child){
    this.children.add(child);
  }
}
Run Code Online (Sandbox Code Playgroud)

首先,我从某种方法获得Child对象的列表.
孩子可能属于多个父母,可能有父母碰撞.

List<Child> children = getChildren();
Run Code Online (Sandbox Code Playgroud)

然后 :

List<Parent> uniqueParents = children
  .stream()
  .collect(Collectors.groupingBy(Child::getParent))
  .keySet()
  .stream()
  .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

所以它有效,但我想避免双流并收集.

这可能直接在一个流中吗?

java collections java-stream

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

带有lambda的Java过滤器

我正在尝试用lambda制作一个过滤器.有一个字符串列表,其中包含应该排序的值,还有另一个列表,其中包含不同的值(即应该过滤的值).所以我一直想做的是:

stringList = stringList.stream()
       .filter(e ->toBeSortedOutList.forEach(outSorted->!e.startsWith(outSorted)))
       .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

不幸的是,我总是得到错误,布尔值无法转换为void.所以我想知道的是,为什么我得到这个错误,如果可以通过迭代通过列表并使用其值来过滤器进行过滤?谢谢你的回答!

java lambda java-8 java-stream

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

我可以结合java8(流,lambda)和番石榴?

在处理转换时(例如:transform List<People> peopleto List<Integer> ages,where People是包含属性的类age),通常有两种方法(对我而言):

  1. 使用java8:

    people.stream().map(p -> p.getAge()).collect(toList());

  2. 或用户guava2:

    Lists2.transform(people, People2AgeTransformer.INSTANCE);其中People2AgeTransformer是一个变换器,它实现了Function接口以返回年龄.

最近,我偶然发现java8和guava可以合并,因此代码可以是:

Lists2.transform(people, p->p.getAge());
Run Code Online (Sandbox Code Playgroud)

这段代码符合并运行没有任何错误,这让我感到困惑.该方法Lists2.transform()要求第二个args是接口的实现com.google.common.base.Function,而java8 lambda实际上是接口的实现java.util.function.Function.(好吧,它们都声明了一个B apply(A input)将A转换为B 的方法.)

我不明白为什么这会起作用,因为它们是不同包的两个不同界面.

java lambda guava java-stream

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

使用流过滤java中的内部和外部列表

有没有办法使用一些谓词和java流过滤内部和外部列表?例如:

Class outerObject{
    int num;
    List<innerObject> innerObjectList;
}
Class innerObject{
    int num;
}
List <outerObject> outerObjectList
Run Code Online (Sandbox Code Playgroud)

有没有办法过滤列表,使outerObject列表有字段num = 10,相应字段的innerObject's 列表outerObject也被相应的字段过滤num = 10

我试过了:

outerObjectList.stream()
               .filter(i -> i.getNum() == 10)
               .filter(i -> i.getOrders().stream().anyMatch(s -> getNum() == 10))
               .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

但它似乎没有过滤内部列表.

描述性示例:

如果外部列表中有3个对象,num = 10并且3个对象中的每个对象都有1个内部对象innerObjectList,num = 10那么它应该给我一个3 outerObject的列表,innerObject每个列表为1 .

java list java-8 java-stream

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

Java中的ArrayList - 部分检查元素

ArrayList在Java中有一个简单的问题.

我有一个简单的ArrayList.现在我要检查,如果ArrayList包含某个字符串.我知道contains()将对象作为一个整体进行检查,但我想检查对象的一部分是否具有我正在寻找的字符串.

那么实现这一目标的最佳方法是什么?我的样本在这里说False,我希望它说True.怎么样?

ArrayList<String> test_al = new ArrayList();
test_al.add("hello world");

if(test_al.contains("hello")){
    Log.v(LOG_TAG,"True");
}
else{
    Log.v(LOG_TAG,"False");
}
Run Code Online (Sandbox Code Playgroud)

java android arraylist

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

使用 Stream 和 java8 以一个字符串返回工资的最小值、最大值、平均值、总和、计数

我有一群List以薪水为特征的员工。为什么这段代码不起作用?

String joined = employees.stream().collect(
    Collectors.summingInt(Employee::getSalary),
    Collectors.maxBy(Comparator.comparing(Employee::getSalary)),
    Collectors.minBy(Comparator.comparing(Employee::getSalary)),
    Collectors.averagingLong((Employee e) ->e.getSalary() * 2),
    Collectors.counting(),
    Collectors.joining(", "));
Run Code Online (Sandbox Code Playgroud)

我正在使用一套收集器。

java java-8 java-stream collectors

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

使用Java 8计算列表中的出现次数

我有一个自定义类PDFDataItem,提供getValue()方法,该方法返回一个double值(请参阅附加的代码).我还有一个包含多个PDFDataItem实例的ArrayList,每个实例都有一个特定的值:不同的实例可以具有相同的值.我想要做的是创建一个LinkedHashMap,其中单独存储实例的值,并且对于找到的每个值,存储的数量(即它比较的实例的数量).当然,我可以找到许多技巧来实现我的目标,但我想知道是否存在快速方法(可能使用lambda).

public class PDFDataItem{

    double value;

    public PDFDataItem(double value){
        this.value = value;
    }

    public double getValue(){
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

Java 8中的legacy for循环,流和parallelStream之间的比较

import java.util.ArrayList;
import java.util.List;

public class IterationBenchmark {

    public static void main(String args[]){
        List<String> persons = new ArrayList<String>();
        persons.add("AAA");
        persons.add("BBB");
        persons.add("CCC");
        persons.add("DDD");
        long timeMillis = System.currentTimeMillis();
        for(String person : persons)
            System.out.println(person);
        System.out.println("Time taken for legacy for loop : "+
                  (System.currentTimeMillis() - timeMillis));
        timeMillis = System.currentTimeMillis();
        persons.stream().forEach(System.out::println);
        System.out.println("Time taken for sequence stream : "+
                  (System.currentTimeMillis() - timeMillis));
        timeMillis = System.currentTimeMillis();
        persons.parallelStream().forEach(System.out::println);
        System.out.println("Time taken for parallel stream : "+
                  (System.currentTimeMillis() - timeMillis));

    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

AAA
BBB
CCC
DDD
Time taken for …
Run Code Online (Sandbox Code Playgroud)

java performance for-loop java-8 java-stream

-2
推荐指数
1
解决办法
728
查看次数

如何使用Oracle教程中的countGreaterThan方法?

我目前正在官方的Oracle网站上学习java,我复制粘贴下面的代码.代码没有任何问题,但问题是我不知道如何使用它.假设它是一种计算数组中元素数量T[]大于指定元素elem的方法.有人可以告诉我一个如何使用这种方法的例子吗?

public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) {
    int count = 0;
    for (T e : anArray) {
        if (e.compareTo(elem) > 0) {
            ++count;
        }
    }
    return count;
}

public interface Comparable<T> {

    public int compareTo(T o);
}
Run Code Online (Sandbox Code Playgroud)

java arrays generics methods

-2
推荐指数
1
解决办法
147
查看次数

使用流从列表中获取前3个计数

我正在尝试将java7程序转换为java8。我想在下面使用流API进行输出。

public List<String> getTopThreeWeatherCondition7() {
    List<String> _Top3WeatherList = new ArrayList<String>();
    Map<String, Integer> _WeatherCondMap = getWeatherCondition7();
    List<Integer> _WeatherCondList = new ArrayList<Integer>(_WeatherCondMap.values());
    Collections.sort(_WeatherCondList, Collections.reverseOrder());
    List<Integer> _TopThreeWeathersList = _WeatherCondList.subList(0, 3);
    Set<String> _WeatherCondSet = _WeatherCondMap.keySet();
    Integer count = 0;
    for (String _WeatherCond : _WeatherCondSet) {
        count = _WeatherCondMap.get(_WeatherCond);
        for (Integer _TopThreeWeather : _TopThreeWeathersList) {
            if (_TopThreeWeather == count) {
                _Top3WeatherList.add(_WeatherCond);
            }
        }
    }
    _WeatherCondList = null;
    _WeatherCondMap = null;
    _TopThreeWeathersList = null;
    _WeatherCondSet = null;
    return _Top3WeatherList;

}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

-2
推荐指数
1
解决办法
175
查看次数