标签: java-8

带有自定义单元工厂的 javafx ListView 不保留所选单元

我有一个controlsfx CheckListView(甚至与javafx ListView 控件相同的问题),我想在其中显示RadioButtons 而不是CheckBox。所以我通过从几个 javafx 教程中获取帮助来实现自定义单元工厂,并且它正在工作。问题是我选择了第一个单选按钮并向下滚动一点,这样我的几个顶部单选按钮将向上滚动并且现在不可见。然后我再次向上滚动,选择现在消失了。

我调试代码时了解到每次都会创建新单元格并导致此问题,但不幸的是无法找出解决方案。

我附上了一个示例代码,它是从堆栈溢出中得到的,它有同样的问题。

package application;
import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class RadioButtonListView extends Application {

    public static final ObservableList names = FXCollections.observableArrayList();
    private ToggleGroup group = new ToggleGroup();

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("List View Sample");

        final ListView listView = new ListView();
        listView.setPrefSize(200, 250);
        listView.setEditable(true);

        names.addAll("Adam", "Alex", "Alfred", "Albert", "Brenda", "Connie", "Derek", "Donny", "Lynne", "Myrtle", "Rose", "Rudolph", …
Run Code Online (Sandbox Code Playgroud)

javafx java-8 javafx-2 javafx-8

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

理解用于定义 Spring Security bean 的 java 8 lambda 表达式

@Bean
    public AuthenticationEntryPoint unauthorizedEntryPoint() {
        return (request, response, authException) -> response.sendError(HttpServletResponse.SC_UNAUTHORIZED);
    }
Run Code Online (Sandbox Code Playgroud)

如何理解这一点(request, response, authException) ->,它在哪里找到所有这三个变量?没有在类领域。

它是什么 ->

java lambda spring spring-security java-8

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

Java 8 兼容性问题:如何在 Java 8 中将对象数组转换为子类型列表?

所以我有一个在 Java 7 上运行良好的程序,但在 Java 8 中它无法编译并出现错误。所以,我解决了 Java 兼容性问题,我想我找到了原因(或者我找到了吗?http://bugs. java.com/bugdatabase/view_bug.do?bug_id=7144506 ) 。我想知道是否有一种简短的有效方法来复制我的原始代码片段在 Java 8 中所做的事情。这是一个表示这种情况的程序。在我的代码中,有一个 setter 方法可以完成填充数组的工作,但我无法控制它的填充方式。

import java.util.List;
import java.util.Arrays;

public class HelloWorld{
    public static void main(String []args){
        B someObject=new B();
        List<A> a = someObject.getA() == null ? Collections.EMPTY_LIST : Arrays.asList(someObject.getA());
        for ( A item : a ) {
            System.out.println(item.value);
        }
    }
}

class A{
    String value;
    public A(String value){
        this.value = value;
    }
}

class B{
    Object[] getA(){
        Object arr[]= new Object[4];
        arr[0]=new A("hello");
        arr[1]=new A("mello");
        arr[2]=new …
Run Code Online (Sandbox Code Playgroud)

java java-8

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

Java8 - 使用流映射而不收集性能

呈指数增长的流

我有一个Stream,生长成倍创建排列。所以每次调用都会addWeeks增加Stream.

Stream<SeasonBuilder> sbStream = sbSet.stream();

for (int i = 1; i <= someCutOff; i++) {
    sbStream = sbStream.map(sb -> sb.addWeeks(possibleWeeks))
                       .flatMap(Collection::stream); 
}

// Collect SeasonBuilders into a Set
return sbStream.collect(Collectors.toSet());   // size > 750 000 
Run Code Online (Sandbox Code Playgroud)

问题

  • 每次调用都会addWeeks返回 aSet<SeasonBuilder>并将所有内容收集到 a 中Set需要一段时间。
  • addWeeks不是静态的,需要SeasonBuilder在流中的每一个上调用,每次通过循环

    public Set<SeasonBuilder> addWeeks(
        final Set<Set<ImmutablePair<Integer, Integer>>> possibleWeeks) {
            return possibleWeeks.stream()
                    .filter(containsMatchup())   // Finds the weeks to add
                    .map(this::addWeek)   // Create new …
    Run Code Online (Sandbox Code Playgroud)

java lambda java-8 java-stream collectors

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

Java 8 - 按在数组中定义的顺序的属性对对象集合进行排序

假设我有以下课程:

public class Foo {
    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public Foo setId(int id) {
        this.id = id;
        return this;
    }

    public String getName() {
        return name;
    }

    public Foo setName(String name) {
        this.name = name;
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我有几个Foo对象Collection<Foo> fooCollection和 String Array String[] names

现在我想fooCollection按属性name排序,与name字符串排序的顺序相同names

我如何使用 Java 8 Stream 做到这一点?

sorting java-8 java-stream

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

“无序”如何帮助“distinct()”和“groupingBy”

我正在学习 Oracle 的 Stream API Java 1.8 课程,在阅读讲义时偶然发现了这一点:

无序():

– 继承自 BaseStream

– 返回一个无序的流(内部使用)

– 可以提高distinct()和groupingBy()等操作的效率

这是我的问题。无序的属性如何导致更有效的计算distinct()groupingBy()

grouping distinct unordered java-8 java-stream

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

如何在 JavaFX 中的动画计时器中正确放置对话框

我有一个动画计时器,当我处理结束时,如果某个条件为真,我想向用户显示一个对话框。当我只是尝试在 stop() 方法之后调用对话框时,我遇到了这个异常(仅在移动设备上):

java.lang.IllegalStateException:动画或布局处理期间无法进入嵌套循环

因此,对于这种情况,我解决了将对话框包装在 Platform.runLater() 方法中的问题。

这是处理这种情况的正确方法吗?

如果不是,哪个是正确的?

我正在使用的对话框是胶子对话框:

http://docs.gluonhq.com/charm/javadoc/4.2.0/com/gluonhq/charm/glisten/control/Dialog.html

而在这个简单的表演上是不存在的,只有表演和等待。

java javafx java-8 gluon gluon-mobile

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

Jackson @JsonIgnore 继承的 Java 8 默认方法

我有一个带有默认方法的接口:

public interface Book {

    String getTitle();

    default String getSentenceForTitle() {
        return "This book's title is " + getTitle();
    }

}
Run Code Online (Sandbox Code Playgroud)

...我有一个@Entity实现这个接口的JPA :

@Entity
public class JpaBook implements Book {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String title;

    // ...

    @Override
    public String getTitle() {
        return title;
    }

}
Run Code Online (Sandbox Code Playgroud)

使用这个实体,我注意到 Jackson 也会序列化默认方法getSentenceForTitle()- 尽管在我的特殊情况下,我不想sentenceForTitle被序列化。

有没有办法让杰克逊知道我不想序列化默认方法,但要保留该方法的行为?我想出的当前解决方法是覆盖默认方法,用 注释它@JsonIgnore,然后委托给默认方法:

@Entity
public class JpaBook implements Book {

    // ...

    @Override
    @JsonIgnore
    public String getSentenceForTitle() { …
Run Code Online (Sandbox Code Playgroud)

json jackson java-8 default-method

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

如何映射到多个元素并收集

final List<Toy> toys = Arrays.asList("new Toy(1)", "new Toy(2)"); 

final List<Item> itemList = toys.stream()
   .map(toy -> {
        return Item.from(toy); //Creates Item type
   }).collect(Collectors.toList);
Run Code Online (Sandbox Code Playgroud)

上面的代码可以正常工作,并将从玩具列表中生成项目列表。

我想做的是这样的:

final List<Item> itemList = toys.stream()
   .map(toy -> {
        Item item1 = Item.from(toy);
        Item item2 = Item.fromOther(toy);

        List<Item> newItems = Arrays.asList(item1, item2);
        return newItems;
   }).collect(Collectors.toList);
Run Code Online (Sandbox Code Playgroud)

或者

final List<Item> itemList = toys.stream()
   .map(toy -> {
        return Item item1 = Item.from(toy); 
        return Item item2 = Item.fromOther(toy); //Two returns don't make sense but just want to illustrate the idea.       
   }).collect(Collectors.toList); …
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

map.foreach java8中的条件总和

public Double getUnitsBefore(Date recordDate) {
    double eligibleUnits = 0;
    ageBucket.forEach((dateStr, units) -> {
        try {
            Date date = DFT.parse(dateStr);
            if (date.before(recordDate)) {
                //TODO These are eligible units for dividend.
                eligibleUnits = eligibleUnits + units.doubleValue();    //TODO 
            }

        } catch(ParseException e) {
            e.printStackTrace();
        }
    });

    return eligibleUnits;
}
Run Code Online (Sandbox Code Playgroud)
  • 如您所知,行在eligibleUnits = eligibleUnits + units.doubleValue();Java 8 中无法编译。我如何实现这一目标?我只需要在日期在记录日期之前求和。

java java-8

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