2014-05-14 10 views
7

करने के बारे में बिना समान मान वहाँ जावा 8 में एक पूर्वनिर्धारित समारोह है कि कुछ इस तरह करता है वास्तविक उपयोग जब मैं एक रोमन अंकों के एक पूर्णांक पार्स करने के लिए कोशिश कर रहा हूँ:जावा 8 समारोह है कि हमेशा पैरामीटर

// returns the stream of roman numeral symbol based 
// on the digit (n) and the exponent (of 10) 
private static Stream<Symbol> parseDigit(int n, int exp) { 
    if (n < 1) return Stream.empty(); 
    Symbol base = Symbol.base(exp); 
    if (n < 4) { 
     return IntStream.range(0, n).mapToObj(i -> base); 
    } else if (n == 4) { 
     return Stream.of(base, Symbol.fifth(exp)); 
    } else if (n < 9) { 
     return Stream.concat(Stream.of(Symbol.fifth(exp)), 
      IntStream.range(5, n).mapToObj(i -> base)); 
    } else { // n == 9 as n always < 10 
     return Stream.of(base, Symbol.base(exp + 1)); 
    } 
} 

और मैं IntStream.range(0, n).mapToObj(i -> base)Stream.of(base).times(n - 1) की तरह कुछ करने के लिए सरल किया जा सकता है लगता है, तो दुर्भाग्य से धारा वस्तु पर कोई times(int) तरीका है। क्या कोई जानता है कि इसे कैसे बनाया जाए?

+3

क्या आप एक उदाहरण दे सकते हैं जहां _constant_ जैसे फ़ंक्शन उपयोगी होंगे? – nosid

+0

एक उपयोग मामले में भी रुचि रखते हैं। जहां तक ​​मैं देख सकता हूं, सादा 'x -> 5'' निरंतर (5) 'के बराबर होगा, लेकिन मुझे लगता है कि मुझे कुछ याद आ सकता है :) –

+0

x -> 5 बिल्कुल ठीक है ! क्या आप इसे जवाब में डाल सकते हैं? –

उत्तर

10

एक साधारण लैम्ब्डा, x -> val आपकी विधि के बराबर प्रतीत होता है;

Function<Integer, Integer> test1 = constant(5); 
Function<Integer, Integer> test2 = x -> 5; 

... दोनों इनपुट को अनदेखा करते हैं और लागू होने पर स्थिर 5 आउटपुट करते हैं;

> System.out.println(test1.apply(2)); 
5 
> System.out.println(test2.apply(2)); 
5 
संबंधित मुद्दे